【发布时间】:2020-08-05 12:39:36
【问题描述】:
我有一张桌子 A:
Create table A(
Name varchar(10),
Number integer,
Exc integer,
D1 date
)
我已插入 11 行。
Sel * from A;
+ -----+--------+-----+------------+
|姓名 |号码 | EXC | D1 |
+ -----+--------+-----+------------+
|一个 | 1 | 1 | 2020-02-03 |
|一个 | 1 | 2 | 2020-02-03 |
|一个 | 1 | 3 | 2020-02-03 |
|一个 | 1 | 4 | 2020-02-03 |
|一个 | 1 | 1 | 2020-02-04 |
|一个 | 1 | 2 | 2020-02-04 |
|一个 | 1 | 3 | 2020-02-04 |
|一个 | 1 | 1 | 2020-02-05 |
|一个 | 1 | 2 | 2020-02-05 |
|一个 | 1 | 3 | 2020-02-05 |
|一个 | 1 | 4 | 2020-02-05 |
+ -----+--------+-----+------------+
现在,当我应用如下密集排名时:
sel vt.*,dense_rank() OVER(PARTITION BY Name,Number,EXC ORDER BY D1 ) AS rn
from vt;
输出:
+ -----+--------+-----+------------+----+ |姓名 |号码 | EXC | D1 |注册护士 | + -----+--------+-----+------------+----+ |一个 | 1 | 1 | 2020-02-03 | 1 | |一个 | 1 | 2 | 2020-02-03 | 1 | |一个 | 1 | 3 | 2020-02-03 | 1 | |一个 | 1 | 4 | 2020-02-03 | 1 | |一个 | 1 | 1 | 2020-02-04 | 2 | |一个 | 1 | 2 | 2020-02-04 | 2 | |一个 | 1 | 3 | 2020-02-04 | 2 | |一个 | 1 | 1 | 2020-02-05 | 3 | |一个 | 1 | 2 | 2020-02-05 | 3 | |一个 | 1 | 3 | 2020-02-05 | 3 | |一个 | 1 | 4 | 2020-02-05 | 2 | + -----+--------+-----+------------+----+预期:
+ -----+--------+-----+------------+----+ |姓名 |号码 | EXC | D1 |注册护士 | + -----+--------+-----+------------+----+ |一个 | 1 | 1 | 2020-02-03 | 1 | |一个 | 1 | 2 | 2020-02-03 | 1 | |一个 | 1 | 3 | 2020-02-03 | 1 | |一个 | 1 | 4 | 2020-02-03 | 1 | |一个 | 1 | 1 | 2020-02-04 | 2 | |一个 | 1 | 2 | 2020-02-04 | 2 | |一个 | 1 | 3 | 2020-02-04 | 2 | |一个 | 1 | 1 | 2020-02-05 | 3 | |一个 | 1 | 2 | 2020-02-05 | 3 | |一个 | 1 | 3 | 2020-02-05 | 3 | |一个 | 1 | 4 | 2020-02-05 | 3 |【问题讨论】:
-
您使用的是哪个 dbms?
-
这是
NAME=a, NUMBER=1, EXC=4的第二个最低日期,那么为什么您期望是 3 而不是 2?
标签: sql date select window-functions