好的,以下是一个使用ROW_NUMBER() OVER (PARTITION BY id ORDER BY createTime DESC)的简单示例:
假设我们有一个名为"records"的表,包含以下列:
表结构如下:
| 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的最新记录。