【问题标题】:Retrieving the last n records in each group - GCP Spanner检索每组中的最后 n 条记录 - GCP Spanner
【发布时间】:2020-11-30 11:15:27
【问题描述】:

有一张数据表

ID   CLIENT_ID   TYPE           VALUE   DATE
-----------------------------------------------------------
1     101         original       1.2    2020-03-01T13:14:00
2     101         additional     2.7    2020-03-02T13:14:00
3     101         additional     2.65   2020-03-03T13:14:00
4     101         original       1.8    2020-03-04T13:14:00
5     102         original       1.65   2020-04-05T13:14:00
6     102         additional     2.76   2020-04-06T13:14:00
7     102         additional     2.9    2020-04-07T13:14:00
8     102         original       1.1    2020-04-08T13:14:00
9     102         additional     2.65   2020-05-09T13:14:00
10    102         original       1.36   2020-05-10T13:14:00
11    102         original       1.48   2020-05-11T13:14:00
12    102         additional     2.87   2020-05-12T13:14:00
13    101         original       1.69   2020-06-13T13:14:00
14    101         additional     2.95   2020-06-14T13:14:00
15    101         additional     2.87   2020-06-15T13:14:00
16    101         original       1.23   2020-06-16T13:14:00

我想按 CLIENT_ID、TYPE 和 DATE 检索最近的 2 条记录。

ID   CLIENT_ID   TYPE           VALUE   DATE
-----------------------------------------------------------
15    101         additional     2.87   2020-06-15T13:14:00
14    101         additional     2.95   2020-06-14T13:14:00
16    101         original       1.23   2020-06-16T13:14:00
13    101         original       1.69   2020-06-13T13:14:00
12    102         additional     2.87   2020-05-12T13:14:00
9     102         additional     2.65   2020-05-09T13:14:00
11    102         original       1.48   2020-05-11T13:14:00
10    102         original       1.36   2020-05-10T13:14:00

或聚合

ID   CLIENT_ID   TYPE           VALUE   DATE                 VALUE_2ND   DATE_2ND
----------------------------------------------------------------------------------------------
15    101         additional     2.87   2020-06-15T13:14:00   2.95        2020-06-14T13:14:00
16    101         original       1.23   2020-06-16T13:14:00   1.69        2020-06-13T13:14:00
12    102         additional     2.87   2020-05-12T13:14:00   2.65        2020-05-09T13:14:00
11    102         original       1.48   2020-05-11T13:14:00   1.36        2020-05-10T13:14:00

很遗憾,Spanner 不支持窗口函数。

这怎么可能?

【问题讨论】:

    标签: sql google-cloud-platform greatest-n-per-group google-cloud-spanner


    【解决方案1】:

    在标准 SQL 中,您可以将其表示为:

    select t.*
    from t
    where t.date in (select t2.date
                     from t t2
                     where t2.client_id = t.client_id and
                           t2.type = t.type
                     order by t2.date desc
                     limit 1 offset 1
                    )
    order by t.client_id, t.type, t.date;
    

    我不能 100% 确定这在 Spanner 中是否有效,但值得一试。

    【讨论】:

    • 感谢您的评论。我不仅需要按 DATE 订购,还需要按 CLIENT_ID、TYPE 和 DATE 订购。
    • @OlegKoskin 。 . .我认为您只需要在相关子句(我添加)中包含type
    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多