Sql 如何在bigquery中使用rowid按日期获取数据集的第一个值,并将给定日期的所有其他值设置为0
我有一个3列的数据集;日期、销售额和新销售额 我在bigquery中试图做的是,对于给定的日期,获取第一个销售值,并将其填充到一个名为new_sales的新列中,同时将该给定日期的剩余天数保留为0 如何在bigquery中创建此查询Sql 如何在bigquery中使用rowid按日期获取数据集的第一个值,并将给定日期的所有其他值设置为0,sql,google-bigquery,case,window-functions,rowid,Sql,Google Bigquery,Case,Window Functions,Rowid,我有一个3列的数据集;日期、销售额和新销售额 我在bigquery中试图做的是,对于给定的日期,获取第一个销售值,并将其填充到一个名为new_sales的新列中,同时将该给定日期的剩余天数保留为0 如何在bigquery中创建此查询 您可以使用行编号()-但是您需要一个列来定义具有相同日期的行的顺序-我假设id: select t.*, case when row_number() over(partition by date order by id) = 1 then sales en
您可以使用
行编号()
-但是您需要一个列来定义具有相同日期的行的顺序
-我假设id
:
select t.*,
case when row_number() over(partition by date order by id) = 1 then sales end as new_sales
from mytable t
下面是我前面举的一个例子——它应该对您有用: 虽然此答案假设您的销售价值在日期上保持一致且不变,但如果它们确实发生变化,例如2020年10月12日有两个不同的日期,则您需要按日期订购 我的代码如下:
CREATE TABLE links (
date_item varchar(255),
sales INT
);
INSERT INTO links (date_item, sales)
VALUES('12/10/2020',5),
('12/10/2020',5),
('12/10/2020',5),
('13/10/2020',7),
('13/10/2020',7),
('13/10/2020',7),
('13/10/2020',7),
('13/10/2020',7),
('13/10/2020',7),
('13/10/2020',7),
('14/10/2020',3),
('14/10/2020',3),
('14/10/2020',3);
select t.*,
case when ROW_NUMBER () OVER (partition BY date_item) =1 then sales else 0 end as new_sales
from links as t
谢谢,我如何创建一个列来定义具有相同日期的行的顺序?@SuhaybDar:表的主键是什么?没有“first”值。SQL表表示无序的集合,而您的行似乎是完全重复的。排序仅由数据中的列决定。