我有一张这样的table:
ID | Date | Language
---------------------------------
A | 2013-04-10 | EN
A | 2013-04-11 | EN
A | 2013-05-12 | SN
B | 2013-04-01 | SN
B | 2013-05-28 | SN
.... (and many more dates for other ID)
我希望查询为每个id选取最新的日期,为该代码选取语言,依此类推所有记录,并从所有backlog数据到最新日期求和。所以对于上面的数据,结果应该是1+1=2(对于en)和1(对于sn语言),对于id=a,其他id也是如此。我在s/o上发现了几乎相同的问题,但在linq查询(这里)中,不确定如何在标准sql中执行。
这就是我一直在尝试的( up only to sum all data without putting WHERE clause for latest date
):
SELECT
ID,
Date,
SUM(CASE WHEN Language = 'EN' THEN 1 ELSE 0 END) AS Sum_EN, #count all language from latest date of each ID
SUM(CASE WHEN Language = 'SN' THEN 1 ELSE 0 END) AS Sum_SN,
FROM t
#WHERE Date from latest date to all backlog data
GROUP BY ID, Date
样本输出:
ID | Date | Sum_EN | Sum_SN
--------------------------------------
A | 2013-05-12 | 2 | 1
B | 2013-05-28 | 0 | 2
.... (and many more dates for other ID)
注意:我在查询中注解where子句,因为不确定如何为每个id选择最新日期
3条答案
按热度按时间9jyewag01#
如果你想为每个id的最大日期,那么你可以添加最大日期,它会给你的预期输出。
q35jwt9p2#
下面是bigquery标准sql
如果要应用到问题输出的样本数据
68bkxrlz3#
如果我根据结果集正确理解,那么您需要:
不过,你的描述表明:
但是,这只会获取每个项目的最后一个日期的数据
id
,所以我想你想要第一个版本。