如何按出现的顺序选择重复项

时间:2019-10-04 20:28:57

标签: sql google-bigquery greatest-n-per-group

我正在寻找从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

1 个答案:

答案 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
    )