我正在尝试通过MySQL选择合同在2个月后到期的员工。
这是我的SQL语句:
SELECT id,eid,end_date FROM contracts WHERE eid='861' and end_date BETWEEN NOW() AND date_add(NOW(), INTERVAL 2 month)
问题在于,如果合同已经延长,所以它不再在2个月后到期 - 上述声明仍然会选择" old"行。
当合同延长时 - 另一行或"合同"添加start_date和end_date与旧的
不同如何检查它是否在2个月后过期并选择最后一行。
我也试过ORDER BY end_date DESC LIMIT 1
请告知。
谢谢
答案 0 :(得分:1)
您可以先进行汇总,并确定每位员工的最新合同记录。然后,使用您当前的逻辑来确定哪些员工的合同在两个月内到期。这假设最近的合同/延期将具有最新的结束日期。如果情况并非如此,那么您应该根据我们可以做出的假设来更新您的问题。
SELECT
t1.id,
t1.eid,
t1.end_date
FROM contracts t1
INNER JOIN
(
SELECT eid, MAX(end_date) AS max_end_date
FROM contracts
GROUP BY eid
) t2
ON t1.eid = t2.eid AND
t1.end_date = t2.max_end_date
WHERE t1.eid = '861' AND
t1.end_date BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 2 MONTH)
答案 1 :(得分:0)
我认为你可以用这样的查询来做到这一点:
SELECT id,eid,end_date
FROM contracts
WHERE
eid='861'
AND
end_date >= NOW()
AND
end_date <= NOW() + INTERVAL 2 MONTH
ORDER BY
end_date DESC
LIMIT 1;