У меня есть следующие столбцы, поступающие в мой вывод из запроса
select
person_number,
event_id,
question,
answer,
seq,
event_attempt_id,
INTERACTION_CREATION_DATE
from learning_table
Person_number Event_id question answer seq event_attempt_id INTERACTION_CREATION_DATE
6 123 what is your name Reena 78 1 11-jan-2020
6 123 what is your name Freid 67 2 29-jan-2020
6 123 what is your name Heera 89 3 24-jan-2020
Теперь я хочу, чтобы на выходе отображалась только максимальная строка взаимодействия_создания_даты.
i.e.
Person_number Event_id question answer seq event_attempt_id INTERACTION_CREATION_DATE
6 123 what is your name Freid 67 2 29-jan-2020
когда я использую приведенный ниже запрос, он все еще возвращает все строки
select
person_number,
event_id,
question,
answer,
seq,
max(INTERACTION_CREATION_DATE)
from learning_table
group by person_number,
event_id,
question,
answer,
seq
как я могу настроить этот запрос, чтобы получить только последнюю строку даты взаимодействия?
Из связанного дубликата: SELECT * FROM learning_table ORDER BY interaction_creation_date DESC FETCH FIRST ROW ONLY
Как правило, в наши дни мы делаем это «нужна строка в группе, которая имеет максимальное значение блабла вместе со всеми другими ее значениями» с помощью вложенной оконной функции:
with x as (
select
person_number,
event_id,
question,
answer,
seq,
ROW_NUMBER() OVER(PARTITION BY person_number, event_id, question ORDER BY INTERACTION_CREATION_DATE DESC) rn
from learning_table
)
SELECT * FROM x WHERE rn = 1
Да, потому что значения Answer и Seq различны. Группы никогда не становятся меньше, чем отдельные значения всех столбцов в GROUP BY.