Условия множественного фильтра MySQL, которые должны применяться, только если предыдущий фильтр не дал результата - PullRequest
0 голосов
/ 15 мая 2019

У меня есть таблица базы данных Изменить со столбцами change_id , user_name , change_effective_date . Я хочу получить последние эффективные изменения для пользователя до сегодняшнего дня. И если до сегодняшнего дня для пользователя не было изменений, вступающих в силу, необходимо извлечь будущие изменения. Каким будет запрос MySQL для него?

Предположим, таблица:

CHANGE_ID | USER_NAME | EFFECTIVE_DATE

1         BOB         2019-03-01
2         VIC         2019-04-01
3         MARK        2019-08-01
4         BOB         2019-08-01
5         VIC         2019-08-01
6         MARK        2019-09-01

запрос должен вернуться, если сегодня 2019-06-01

CHANGE_ID | USER_NAME | EFFECTIVE_DATE

1         BOB         2019-03-01
2         VIC         2019-04-01
3         MARK        2019-08-01

Поскольку у Марка нет записи, предшествующей сегодняшнему дню, следует извлечь его самую последнюю запись в будущем.

Примечание. Все даты представлены в формате ГГГГ-ММ-ДД.

1 Ответ

0 голосов
/ 15 мая 2019

Можете ли вы попробовать это? По вашей логике МАРК должен вернуться 2019-09-01. Правильно?

SELECT A.USER_NAME ,
CASE 
    WHEN B.mx_date_b IS NULL THEN a.mx_date_a 
    ELSE b.mx_date_b 
END AS EFFECTIVE_DATE
FROM 
(
    SELECT USER_NAME,
    MAX(EFFECTIVE_DATE) mx_date_a
    FROM `Change`  
    GROUP BY USER_NAME
)A
LEFT JOIN 
(
    SELECT USER_NAME,
    MAX(EFFECTIVE_DATE) mx_date_b
    FROM `Change` 
    WHERE EFFECTIVE_DATE < DATE(NOW())
    GROUP BY USER_NAME
)B 
ON A.USER_NAME = B.USER_NAME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...