Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在bigquery中使用rowid按日期获取数据集的第一个值,并将给定日期的所有其他值设置为0_Sql_Google Bigquery_Case_Window Functions_Rowid - Fatal编程技术网

Sql 如何在bigquery中使用rowid按日期获取数据集的第一个值,并将给定日期的所有其他值设置为0

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

我有一个3列的数据集;日期、销售额和新销售额

我在bigquery中试图做的是,对于给定的日期,获取第一个销售值,并将其填充到一个名为new_sales的新列中,同时将该给定日期的剩余天数保留为0

如何在bigquery中创建此查询


您可以使用
行编号()
-但是您需要一个列来定义具有相同
日期的行的顺序
-我假设
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表表示无序的集合,而您的行似乎是完全重复的。排序仅由数据中的列决定。