Как выбрать дубликаты по первому порядку появления - PullRequest
0 голосов
/ 04 октября 2019

Я хочу выбрать уникальные значения из базы данных SQL, но я хочу убедиться, что я выбираю только первый дубликат в порядке появления (в моем случае - дата в больнице, время поступления столбца)

Вы можете увидеть код ниже. Я пытаюсь взять только идентификаторы пациентов, впервые госпитализированных в первый раз, которые соответствуют столбцу "intime".

У меня нет абсолютного способа проверить это, упорядочив, как я делал, и используя групповой SQLна самом деле вернет идентификатор в том же порядке.

Большое спасибо.

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 голосов
/ 04 октября 2019

Используйте 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

Если СУБД не поддерживает оконные функции, такие как 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
    )
...