sql - 使用 SQL 按组和排名识别结果

标签 sql postgresql grouping window-functions

我有一个具有以下结构的表:

id          timestamp       area
717416915   18:30:53.063    25.691601
717416915   18:31:34.863    31.200506
717416915   18:32:23.665    25.690088
1994018321  18:32:45.467    37.409171
1994018321  18:33:19.612    37.409171
424164505   18:36:16.634    18.22091
424164505   18:36:36.899    18.210754
424164505   18:37:08.614    19.829266
2394018356  18:37:27.231    79.31705

我想要做的是以这样一种方式总结这些值,即我可以识别每个 id 的区域,按 timestamp 排序。例如,如果我想要第一个 area 值,它将如下所示:

id          timestamp       area_1
717416915   18:30:53.063    25.691601
1994018321  18:32:45.467    37.409171
424164505   18:36:16.634    18.22091
2394018356  18:37:27.231    79.31705

如果我想获得每个 id 的第二个 area 值,它将如下所示:

id          timestamp       area_2
717416915   18:31:34.863    31.200506
1994018321  18:33:19.612    37.409171
424164505   18:36:36.899    18.210754

我明白我需要按时间排序,然后确定每个 id 的第一个值。我不太明白该怎么做。我尝试做的是以下内容(没有运行,因为我仍然不太清楚如何使用 OVER 函数)。

WITH T AS (
    SELECT * OVER(PARTITION BY a.id ORDER BY a.timestamp) AS rnk
    FROM mytable AS a
) 
SELECT area as area_1
FROM T
WHERE rnk = 1
GROUP BY a.id
ORDER BY a.timestamp;

我计划使用 rnk=2 等来获取每个 id 的后续面积值。

最佳答案

语法应该如下:

SELECT RANK() OVER(PARTITION BY a.id ORDER BY a.timestamp) AS rnk

关于sql - 使用 SQL 按组和排名识别结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10466852/

相关文章:

c# - 嵌套组 Linq 查询与 Groupby 扩展方法

c# - 在 Datagrid wpf 上分组数据

sql - 涉及弱实体集的一对一关系的数据库模式是什么?

SQL:- 我正在尝试获取表中的行,其中最多 3 行的数量应该 <=1024

postgresql - 从查询到 c.JSON 非常慢

sql - 具有递归和默认值的树

sql - 生成 1 - 10 范围内的随机数

php - 对一列的数组数据进行分组并对另一列的数据求和

sql - 返回表的 PostgreSQL 函数

SQL:带有参数的WITH子句?