我有一个数据库表 Change ,其中有 change_id ,用户名, change_生效日期列。我想在今天之前为用户检索最新的有效更改。如果今天之前没有对用户有效的更改,则应该检索将来的有效更改。 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
由于Mark没有今天以前的记录,所以应该检索他最近的将来记录。
注意:所有日期均为YYYY-MM-DD格式。
答案 0 :(得分:0)
可以请您试试吗?根据您的逻辑,MARK应该返回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