sql按组列出的前3条最新记录

agxfikkp  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(433)

我有一个带有日期列和字符串列的表。我正在尝试将字符串列筛选到最近的3条记录。

+----------+--------------+
|   date   |    string    |
+----------+--------------+
|2000-11-14|           AAA|
|2009-11-07|           AAA|
|2020-11-20|           AAA|
|2019-11-07|           AAA|
|2018-11-07|           AAA|
|2020-11-22|           BBB|
|2019-11-20|           BBB|
|2018-11-20|           BBB|
|2014-11-21|           BBB|
|2016-11-22|           CCC|
|2017-11-08|           CCC|
|2018-11-07|           CCC|
|2019-11-22|           CCC|
|2020-11-09|           CCC|
|2020-11-11|           DDD|
+----------+--------------+

最后一张表如下所示:

+----------+--------------+
|   date   |    string    |
+----------+--------------+
|2020-11-20|           AAA|
|2019-11-07|           AAA|
|2018-11-07|           AAA|
|2020-11-22|           BBB|
|2019-11-20|           BBB|
|2018-11-20|           BBB|
|2020-11-09|           CCC|
|2019-11-22|           CCC|
|2018-11-07|           CCC|
|2020-11-11|           DDD|
+----------+--------------+

我想我用不了 MAX(date) 在这里按组,因为我试图获得前三名最近的记录(不是前1名)。

ma8fv8wu

ma8fv8wu1#

这个 ROW_NUMBER 解析函数特别适合于这类问题:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY string ORDER BY date DESC) rn
    FROM yourTable
)

SELECT date, string
FROM cte
WHERE rn <= 3;

相关问题