#sql #sqlite
#sql #sqlite
Вопрос:
У меня есть запрос, который возвращает этот результат. Как я могу ограничить вхождение значения из 4-го столбца.
19 1 _BOURC01 1
20 1 _BOURC01 3 2019-11-18
20 1 _BOURC01 3 2017-01-02
21 1 _BOURC01 6
22 1 _BOURC01 10
23 1 _BOURC01 13 2016-06-06
24 1 _BOURC01 21 2016-09-19
Мой запрос:
SELECT "_44_SpeakerSpeech"."id" AS "id", "_44_SpeakerSpeech"."active" AS "active", "_44_SpeakerSpeech"."id_speaker" AS "id_speaker", "_44_SpeakerSpeech"."Speech" AS "Speech", "34 Program Weekend"."date" AS "date"
FROM "_44_SpeakerSpeech"
LEFT JOIN "_34_programWeekend" "34 Program Weekend" ON "_44_SpeakerSpeech"."Speech" = "34 Program Weekend"."theme_id"
WHERE "id_speaker" = "_BOURC01"
ORDER BY id_speaker, Speech, date DESC
Спасибо
Комментарии:
1. Какой результат вы на самом деле хотите здесь?
2. Я хочу удалить
20 1 _BOURC01 3 2017-01-02
из результата3. На основе какой логики?
4. В 4-м столбце, который является столбцом речи из запроса, я хочу, чтобы для каждого указанного значения было только одно вхождение.
5. Почему вы упоминаете только 4-й столбец? Все 4 столбца одинаковы в строках 2 и 3.
Ответ №1:
Я думаю, это то, что вы хотите здесь:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY s.id, s.active, s.id_speaker, s.Speech
ORDER BY p.date DESC) rn
FROM "_44_SpeakerSpeech" s
LEFT JOIN "_34_programWeekend" p ON s.Speech = p.theme_id
WHERE s.id_speaker = '_BOURC01'
)
SELECT id, active, id_speaker, Speech, date
FROM cte
WHERE rn = 1;
Эта логика предполагает, что когда две или более записей имеют одинаковые значения столбцов (за исключением даты), вы хотите сохранить только самую последнюю запись.