问题描述
我有3列的数据集;日期,销售和新销售。
我要在bigquery中做的是给定日期,获取第一个销售值,然后将其填充到名为new_sales的新列中,同时将给定日期的其余日期保留为0。
我该如何在bigquery中创建此查询?
解决方法
您可以使用row_number()
-但是您需要使用一列来定义具有相同date
的行的顺序-我假设使用id
:
select t.*,case when row_number() over(partition by date order by id) = 1 then sales end as new_sales
from mytable t
,
这是我之前做的一个例子-应该对您有用:
http://sqlfiddle.com/#!17/5c48e/8/0
尽管此答案假设您的销售价值在日期上保持一致并且没有变化,如果它们确实发生了变化,例如2020年12月10日有两个不同的日期,那么您需要按日期订购。
我的代码如下:
CREATE TABLE links (
date_item varchar(255),sales INT
);
INSERT INTO links (date_item,sales)
VALUES('12/10/2020',5),('12/10/2020',('13/10/2020',7),('14/10/2020',3),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