我有一个表,其日期(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”列 消除
答案 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;