好的,以下是一个使用ROW_NUMBER() OVER (PARTITION BY id ORDER BY createTime DESC)
的简单示例:
假设我们有一个名为"records"的表,包含以下列:
- id: 记录的唯一标识符
- createTime: 记录创建的时间戳
- value: 记录的值
表结构如下:
id | createTime | value |
---|---|---|
1 | 2023-07-01 | 100 |
1 | 2023-07-02 | 200 |
1 | 2023-07-03 | 150 |
2 | 2023-07-01 | 50 |
2 | 2023-07-02 | 150 |
3 | 2023-07-01 | 80 |
现在,我们想要找到每个id的最新的记录,即根据createTime降序排序后的第一条记录。我们可以使用ROW_NUMBER() OVER (PARTITION BY id ORDER BY createTime DESC)
来实现这个目标。
以下是使用此函数的查询示例:
SELECT id, createTime, value
FROM (
SELECT id, createTime, value,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY createTime DESC) AS rn
FROM records
) AS subquery
WHERE rn = 1;
查询结果如下:
id | createTime | value |
---|---|---|
1 | 2023-07-03 | 150 |
2 | 2023-07-02 | 150 |
3 | 2023-07-01 | 80 |
在这个结果中,我们得到了每个id的最新的记录,即根据createTime降序排序后的第一条记录。每个分区(即每个id)内部的记录按照createTime降序排序,并且分配了一个行号(rn)。外部查询选择了行号为1的记录,也就是每个分区中的第一条记录。这样,我们得到了每个id的最新记录。