选择最大分区表

时间:2019-01-14 14:06:57

标签: google-cloud-platform google-bigquery

我有一个表,其日期(transaction_time)上有分区,并且我有一个 选择MAX出现问题。
如果在一个ID上获得的结果多于1行,我将尝试获得时间戳最高的行。

数据示例:

1. ID = 1 , Transaction_time = "2018-12-10 12:00:00"
2. ID = 1 , Transaction_time = "2018-12-09 12:00:00"
3. ID = 2 , Transaction_time = "2018-12-10 12:00:00"
4. ID = 2 , Transaction_time = "2018-12-09 12:00:00"

我想要的结果:

1. ID = 1 , Transaction_time = "2018-12-10 12:00:00"
2. ID = 2 , Transaction_time = "2018-12-10 12:00:00"

这是我的查询

SELECT ID, TRANSACTION_TIME FROM `table1` AS T1
WHERE TRANSACTION_TIME = (SELECT MAX(TRANSACTION_TIME)
                            FROM `table1` AS T2
                           WHERE T2.ID = T1.ID )

我收到的错误:

  

错误:在没有过滤器的情况下无法查询表'table1'   可用于分区的“ TRANSACTION_TIME”列   消除

2 个答案:

答案 0 :(得分:0)

WHERE子句中,BigQuery似乎没有关联的子查询。我不知道如何解决您当前的方法,但是您也许可以在这里使用ROW_NUMBER

SELECT t.ID, t.TRANSACTION_TIME
FROM
(
    SELECT ID, TRANSACTION_TIME,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY TRANSACTION_TIME DESC) rn
    FROM table1
) t
WHERE rn = 1;

答案 1 :(得分:0)

可以这样:

SELECT id, MAX(transaction_time) FROM `table1` GROUP BY id;
相关问题