假设有一个表 dd:
| id(整数) | 名称(varchar) | ts(日期) |
|---|---|---|
| 1 | 第一的 | 2021-03-25 |
| 2 | 第一的 | 2021-03-30 |
当我使用以下内容查询此表时:
SELECT *, MAX(ts) OVER (PARTITION BY name ORDER BY ts) max_ts FROM dd;
那么结果是:
| id(整数) | 名称(varchar) | ts(日期) | max_ts(日期) |
|---|---|---|---|
| 1 | 第一的 | 2021-03-25 | 2021-03-25 |
| 2 | 第一的 | 2021-03-30 | 2021-03-30 |
当我将“DESC”添加到 Order By 子句时:
SELECT *, MAX(ts) OVER (PARTITION BY name ORDER BY ts DESC) max_ts FROM dd;
结果是:
| id(整数) | 名称(varchar) | ts(日期) | max_ts(日期) |
|---|---|---|---|
| 2 | 第一的 | 2021-03-30 | 2021-03-30 |
| 1 | 第一的 | 2021-03-25 | 2021-03-30 |
这一次的结果是我所期望的。考虑到我按名称对记录进行分区,然后从中获取最大日期,我希望max_ts值在两种情况下都相同(最大值),因为从组中获取最大值时顺序并不重要. 但实际上,在第一种情况下,结果包含不同的max_ts值,而不是最大值。
为什么它会这样工作?为什么排序会影响结果?