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

问题描述

我有3列的数据集;日期,销售和新销售。

我要在bigquery中做的是给定日期,获取一个销售值,然后将其填充到名为new_sales的新列中,同时将给定日期的其余日期保留为0。

我该如何在bigquery中创建此查询

enter image description here

解决方法

您可以使用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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...