Запрос SQLite — ограничение появления значения

#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;
 

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