Запрос" SELECT DISTINCT " возвращает слишком много уникальных строк


На данном этапе я работаю над относительно простым запросом, и мне интересно, как я могу получить одну строку данных, когда есть изменение в данных столбца (статус). Я знаю, что это звучит как путаница, я просто не знаю, как выразить это в правильных терминах, поэтому я просто покажу вам!

Я пытаюсь извлечь самую высокую метку даты в столбце (whse_load_ts), где столбец (whse_ac) не имеет значения Y. Я хочу, чтобы это вернуло одну строку.

C_CLM   C_STA_CLM   WHSE_ACTN_CD    WHSE_CURR_ROW_IND   WHSE_LOAD_TS
12056733           AC                  U                     2012-05-30 03:18:12

В настоящее время он возвращает две строки из-за изменения статуса c_sta_clm.

C_CLM     C_STA_CLM  WHSE_ACTN_CD   WHSE_CURR_ROW_IND         WHSE_LOAD_TS
12056733         AC             U                      2012-05-30 03:18:12
12056733         PC             U                      2012-04-28 03:19:38

Все данные для этого конкретного утверждения выглядят следующим образом:

 12056733   PC  I       2012-02-04 03:20:25.150
 12056733   PC  U       2012-02-07 03:19:43.230
 12056733   PC  U       2012-02-11 03:21:31.440
 12056733   PC  U       2012-04-28 03:19:38.380
 12056733   AC  U       2012-05-17 03:18:25.920
 12056733   AC  U       2012-05-19 03:20:33.200
 12056733   AC  U       2012-05-30 03:18:12.370
 12056733   TE  U   Y   2012-06-06 03:20:07.520

Запрос выглядит следующим образом

SELECT 
    c_clm,
    c_sta_clm,
    whse_curr_row_ind,
    max(whse_load_ts) as "Loaded"
FROM 
    pearl_p.TLTC900_CLM_PRSST
WHERE 
    whse_curr_row_ind not in('y')
AND c_clm = '12056733'
group by 1,2,3

В основном это вытягивание максимальной даты для каждого статуса AC/PC, когда я просто хочу максимальную дату для чего-либо без Y в столбце whse_curr_row_ind

1 2

1 ответ:

Это можно сделать с помощью подзапроса:

SELECT 
    p1.c_clm,
    p1.c_sta_clm,
    p1.whse_curr_row_ind,
    p2.Loaded
FROM pearl_p.TLTC900_CLM_PRSST p1
INNER JOIN
(
    select max(whse_load_ts) as Loaded, C_CLM
    from  pearl_p.TLTC900_CLM_PRSST
    where whse_curr_row_ind not in('y')
    group by C_CLM
) p2
    on p1.whse_load_ts = p2.Loaded
    and p1.C_CLM = p2.C_CLM
WHERE p1.whse_curr_row_ind not in('y')