SQL/Bigquery中的多重聚合
我有一个名为user\u state的表,其中包含user\u ID、account\u ID、Balance、Date列。每个用户id可以有多个帐户。 示例表如下所示: 您可以使用脚本创建表:SQL/Bigquery中的多重聚合,sql,google-bigquery,Sql,Google Bigquery,我有一个名为user\u state的表,其中包含user\u ID、account\u ID、Balance、Date列。每个用户id可以有多个帐户。 示例表如下所示: 您可以使用脚本创建表: CREATE TABLE USER_STATE (USER_ID int, ACCOUNT_ID int, SNAPSHOT_DATE DATE, BALANCE float); INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DAT
CREATE TABLE USER_STATE (USER_ID int, ACCOUNT_ID int, SNAPSHOT_DATE DATE, BALANCE float);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(23,1 ,'2016-07-01', 50);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(23,2 ,'2016-07-01', 50);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(23,2 ,'2016-07-05', 80);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(23,1, '2016-07-27', 150);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(23,1,'2016-07-31', 200);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(23,1, '2016-08-18', 150);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(23,2,'2016-08-21', 250);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(23,1,'2016-08-21', 250);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(44,1, '2016-06-01', 10);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(44,2, '2016-06-01', 20);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(44, 1,'2016-06-05', 40);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(44,1, '2016-06-27', 90);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(44,1, '2016-06-31', 300);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(44,1, '2016-09-18', 400);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(44,1, '2016-09-21', 200);
INSERT INTO USER_STATE(USER_ID,ACCOUNT_ID,SNAPSHOT_DATE,BALANCE) VALUES(44,2, '2016-09-21', 200);
我希望每个用户每月获得以下值:
- 每个用户当月的首个月日和当月首个月的余额总和
- 每个用户当月的最后一天和当月最后一天的余额总和
- 每个用户每月的平均余额
比克拉姆。按快照日期和用户进行聚合,然后按用户和月份进行聚合:
select user_id, date_trunc(snapshot_date, month) as yyyymm,
min(snapshot_date) as first_date,
array_agg(balance order by snapshot_date limit 1)[ordinal(1)] as first_balance,
max(snapshot_date) as first_date,
array_agg(balance order by snapshot_date desc limit 1)[ordinal(1)] as last_balance,
avg(balance)
from (select user_id, snapshot_date, sum(balance) as balance
from user_state u
group by 1, 2
) u
group by 1, 2;
感谢您的解决方案,它可以工作,但是有一个拼写错误eesc,它应该是desc。你能解释一下这个[序数(1)]在做什么吗?