sql - 在 Sqlite 中,为不同列中返回的每个名称获取前 2 个
问题描述
我有这个返回按 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 |
+-------------|------------|------------+
解决方案
对于这个特定问题,GMB 的答案略短一些:
select hipaa_short, min(meeting_date) as prior_date, max(meeting_date) as next_date
from (select m.*,
row_number() over (partition by hipaa_short order by meeting_date desc) as rn
from meetings m
) m
where rn <= 2
group by hipaa_short
推荐阅读
- tibco - TIBCO EMS 在等待确认时哪个超时?
- google-cloud-platform - 通过使用适用于 Google Compute Engine API 的 Node.js 客户端库附加现有磁盘来创建新 VM
- configuration - 如何在独立模式下在集群中配置 jbossfuse 7.0
- bash - 带有 base64 的 Google Speech bash 脚本:意外的令牌。\n
- swift - 通过枚举显示多个 UICollectionViewCells?
- idl-programming-language - 使用 idl 的曲线下面积
- r - 将预测值添加到原始 df
- python - 如何更改 kivy Graph 的背景颜色?
- javascript - 从输入中检索数据 - laravel
- xslt - 按类型分组的 xslt 字段