MySQL SELECT条件基于最后一行和日期间隔

时间:2017-06-02 05:59:42

标签: php mysql sql database

我正在尝试通过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

请告知。

谢谢

2 个答案:

答案 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;