@immelnikoff
Изучаю БД

Как получить первое non-NULL значение в группе для данного поля?

Поясню.
Например, у нас имеется некоторый SELECT ... GROUP BY.
Необходимо для каждой группы получить первое ненулевое значение для данного поля (не входящего в поля группировки). Очевидно, предполагается некоторый ORDER BY внутри групп.
Пусть имеется такая таблица:
client_id massage dttm
1 NULL 2022-01-01 05:12:12
1 hi 2022-01-01 05:12:15
1 I want to fuck 2022-01-01 05:12:18
3 NULL 2022-01-02 05:12:12
3 NULL 2022-01-02 05:12:15
3 ohhh 2022-01-02 05:12:18
4 nice dick pic! 2022-01-03 05:12:18

Запрос должен вернуть:
client_id massage dttm
1 I want to fuck 2022-01-01 05:12:18
3 ohhh 2022-01-02 05:12:18
4 nice dick pic! 2022-01-03 05:12:18
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
SELECT DISTINCT 
       client_id,
       FIRST_VALUE(massage) 
           OVER (PARTITION BY client_id 
                 ORDER BY massage IS NULL, dttm) massage
FROM test

Если СУБД не поддерживает прямого ORDER BY massage IS NULL, dttm, то ORDER BY CASE WHEN massage IS NULL THEN 1 ELSE 0 END, dttm.

https://dbfiddle.uk/?rdbms=mysql_8.0&rdbms2=sqlser...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Tomio
@Tomio
backend developer (python, php)
Возможно, если вы приведете пример полного запроса с уточнениями, то помочь вам будет легче.
Может быть вам подойдет постфильтрация с помощью HAVING, а может нужно будет функию COALESCE применить. Без подробностей не ясно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы