【发布时间】:2020-11-14 18:48:16
【问题描述】:
我有这个返回按 Hipaa_Short 分组的最近 2 个日期。对于每个 Hipaa_Short,我想要一个列中的最新消息和另一列中的第二个最新消息。有可能缺少日期(因此 Hipaa_Short 只有一行)在这种情况下,我也希望显示空值。我正在使用 Sqlite3,所以我确信一些“花哨”的东西不会起作用。
SELECT * FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY Hipaa_Short ORDER BY Meeting_Date DESC) AS rn
FROM Meetings
)
WHERE rn < 3
这是我得到的,但不是我想要的:
pk_id Hipaa_Short Meeting_Date rn
+-------|-------------|--------------+-----+
| 2 | LastFirst | 2020-02-01 | 2 |
| 5 | LastFirst | 2020-03-01 | 1 |
| 6 | JoneBob | 2020-03-01 | 2 |
| 7 | JoneBob | 2020-04-01 | 1 |
| 8 | JonesTom | 2020-06-01 | 2 |
| 9 | JonesTom | 2020-07-01 | 1 |
| 10 | NortEdw | 2020-04-01 | 1 |
+-------|-------------|--------------+-----+
会议桌:
REATE TABLE "Meetings" (
"id_pk" INTEGER NOT NULL,
"Hipaa_Short" TEXT NOT NULL,
"Meeting_Date" TEXT NOT NULL,
"MTG_Year" INTEGER,
"MTG_Month" INTEGER,
"MTG_Day" INTEGER,
"CN_Date" TEXT,
"Meeting_Type" TEXT,
"Date_Added" TEXT,
"Annual" TEXT,
"LOCSI_Flag" TEXT,
"Hipaa_RID" TEXT,
PRIMARY KEY("id_pk"),
UNIQUE("Hipaa_Short","Meeting_Date")
)
样本数据:
pk_id Hipaa_Short Meeting_Date
+-------|-------------|--------------+
| 1 | LastFirst | 2020-01-01 |
| 2 | LastFirst | 2020-02-01 |
| 3 | JoneBob | 2020-02-01 |
| 4 | JonesTom | 2020-02-01 |
| 5 | LastFirst | 2020-03-01 |
| 6 | JoneBob | 2020-03-01 |
| 7 | JoneBob | 2020-04-01 |
| 8 | JonesTom | 2020-06-01 |
| 9 | JonesTom | 2020-07-01 |
| 10 | NortEdw | 2020-04-01 |
+-------|-------------|--------------+
期望的输出:
Hipaa_Short Prior Date Next Date
+-------------|------------+------------+
| LastFirst | 2020-02-01 | 2020-03-01 |
| JoneBob | 2020-03-01 | 2020-04-01 |
| JonesTom | 2020-06-01 | 2020-07-01 |
| NortEdw | | 2020-04-01 |
+-------------|------------|------------+
【问题讨论】:
标签: sql sqlite pivot greatest-n-per-group window-functions