如何获取具有最新日期的行?

and*_*rew 2 sql google-bigquery

我在 BigQuery 中有这张表

country, date, confirmed    
Afghanistan, 2020-03-16, 21
Afghanistan, 2020-03-17, 22
Afghanistan, 2020-03-18, 22
Albania, 2020-03-16, 23
Albania, 2020-03-17, 33
Albania, 2020-03-18, 38
...
Run Code Online (Sandbox Code Playgroud)

我想显示每个国家/地区的所有行以及最新日期,但是此命令不起作用>

SELECT * FROM table where date=max(date) > WHERE 子句中不允许使用聚合函数 MAX。

输出应该是:

Afghanistan, 2020-03-18, 22
Albania, 2020-03-18, 38
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Mik*_*ant 6

以下是 BigQuery 标准 SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY day DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY country   
Run Code Online (Sandbox Code Playgroud)

是否适用于您的问题中的示例数据,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Afghanistan' country, DATE '2020-03-16' day, 21 confirmed UNION ALL
  SELECT 'Afghanistan', '2020-03-17', 22 UNION ALL
  SELECT 'Afghanistan', '2020-03-18', 22 UNION ALL
  SELECT 'Albania', '2020-03-16', 23 UNION ALL
  SELECT 'Albania', '2020-03-17', 33 UNION ALL
  SELECT 'Albania', '2020-03-18', 38 
)
SELECT AS VALUE ARRAY_AGG(t ORDER BY day DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY country
Run Code Online (Sandbox Code Playgroud)

输出是

Row country         day         confirmed    
1   Afghanistan     2020-03-18  22   
2   Albania         2020-03-18  38   
Run Code Online (Sandbox Code Playgroud)