MySQL 查询仅获取一条记录:当 end_date 为 null 或 max(end_date) 时
Posted
技术标签:
【中文标题】MySQL 查询仅获取一条记录:当 end_date 为 null 或 max(end_date) 时【英文标题】:MySQL query to get only one record: either when end_date is null or max(end_date) 【发布时间】:2022-01-15 03:22:30 【问题描述】:我有下表 (employee_organization
):
ID | employee_id | organization_id | start_date | end_date |
---|---|---|---|---|
1 | 77 | 16 | 2021-01-01 | 2021-06-30 |
2 | 11 | 23 | 2020-01-01 | 2021-05-27 |
3 | 77 | 16 | 2021-08-01 | 2021-08-31 |
4 | 77 | 16 | 2021-09-01 | NULL |
我需要一个查询来过滤掉employee_id = 77
、organization_id = 16
和end_date is null
的记录。如果没有找到匹配的行,则返回带有max(end_date)
的行。因此,在上面的示例表中,应该只返回带有id=4
的行。
【问题讨论】:
到目前为止你尝试过什么?如果这些情况都不匹配max
也可以是这些值中的任何一个?
我已经更新了示例表...如果行 ID=4 不存在,我希望结果行 ID=3。我希望这会有所帮助。
【参考方案1】:
SELECT *
FROM table
WHERE needed conditions
ORDER BY end_date IS NULL DESC, end_date DESC LIMIT 1
【讨论】:
【参考方案2】:一个通用的解决方案是使用相关子查询来查找每个员工的最大日期(空值优先):
select *
from t
where end_date <=> (
select end_date
from t as x
where x.employee_id = t.employee_id
order by end_date IS NOT NULL, end_date desc
limit 1
)
【讨论】:
以上是关于MySQL 查询仅获取一条记录:当 end_date 为 null 或 max(end_date) 时的主要内容,如果未能解决你的问题,请参考以下文章
如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?
如何使用聚合函数在 MySQL 查询中获取分组记录的第一条和最后一条记录?
mysql 查询时间范围内的数据该怎么写select语句,如果结束时间为空则不判断结束时间