Как я могу вернуть только одну запись для каждого типа? - PullRequest
1 голос
/ 18 февраля 2020

У меня есть таблица с несколькими записями для одного типа учетной записи, и я хочу вернуть только одну к последней дате. У меня есть:

SELECT
id_nbr AS ID,
contact_type AS contype,
last_update AS date
FROM table
WHERE (contact_type = 'AAA' OR contact_type = 'BBB' OR contact_type = 'CCC');

Может возвращаться что-то вроде этого:

ID          contype     date
111111111   AAA         2020-01-30
111111111   AAA         2019-05-05 
111111111   BBB         2020-01-02
111111111   CCC         2020-02-17

Глядя на эти данные, я хочу только 3 строки, потому что contype имеет несколько записей AAA, но я хочу только последние свидание. Что-то вроде:

ID          contype     date
111111111   AAA         2020-01-30
111111111   BBB         2020-01-02
111111111   CCC         2020-02-17

Это, очевидно, очень высокий уровень, но как мне этого добиться? Это очень помогло бы мне. Заранее спасибо !!

Ответы [ 2 ]

1 голос
/ 18 февраля 2020
-- create a new column (temp_tab) with max date and
-- select the rows where the date is equal to temp_tab


select ID, contype, date from
(select ID, contype, date, max(date) over (partition by ID, contype) as temp_tab from table)
where date = temp_tab 
1 голос
/ 18 февраля 2020

Использовать qualify:

SELECT id_nbr AS ID, contact_type AS contype, last_update AS date
FROM table
WHERE contact_type IN ('AAA', 'BBB' , 'CCC')
QUALIFY ROW_NUMBER() OVER (PARTITION BY contact_type ORDER BY last_update DESC) = 1;

Возвращает самую последнюю строку для каждого типа.

...