【问题标题】:SELECT MAX PARTITION TABLE选择最大分区表
【发布时间】:2019-06-08 12:46:54
【问题描述】:

我有一个在 date(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” 消除

【问题讨论】:

标签: google-cloud-platform google-bigquery


【解决方案1】:

BigQuery 似乎没有 WHERE 子句中的相关子查询。我不知道如何解决您当前的方法,但您可以在这里使用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;

【讨论】:

【解决方案2】:

可以这样做:

SELECT id, MAX(transaction_time) FROM `table1` GROUP BY id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2017-02-05
    • 2012-01-01
    • 2015-11-10
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多