我正在寻找从SQL数据库中选择唯一值的方法,但我想确保仅按出现顺序选择第一个重复项(在我的情况下-住院日期,白银病历)
您可以看到下面的代码。 我只想获取患者第一次住院时对应于“ intime”栏的ID。
我没有绝对的方法通过像我一样排序和使用groupby来检查,实际上SQL会以相同的顺序返回ID。
非常感谢您。
WITH ccupatients AS
(SELECT HADM_ID
FROM `physionet-data.mimiciii_clinical.icustays` i
WHERE first_careunit = 'CCU'
ORDER BY intime)
SELECT hadm_id
FROM ccupatients
GROUP BY hadm_id
答案 0 :(得分:0)
如果您的RDBMS支持ROW_NUMBER()
,则使用它:通过对具有相同intime
的记录组中的ham_id
进行递增,然后在顶部的外部查询中进行过滤,从而对记录进行排名每组记录:
SELECT hadm_id
FROM (
SELECT hadm_id, ROW_NUMBER() OVER(PARTITION BY hadm_id ORDER BY intime) rn
FROM `physionet-data.mimiciii_clinical`.icustays
WHERE first_careunit = 'CCU'
) x
WHERE rn = 1
如果RDBMS不支持ROW_NUMBER()
之类的窗口函数,则另一种选择是将NOT EXISTS
条件与相关的子查询一起使用:
SELECT hadm_id
FROM `physionet-data.mimiciii_clinical`.icustays i
WHERE
first_careunit = 'CCU'
AND NOT EXISTS (
SELECT 1
FROM `physionet-data.mimiciii_clinical`.icustays i1
WHERE
i1.first_careunit = 'CCU'
AND i1.hadm_id = i.hadm_id
AND i1.intime < i.intime
)