我目前正在制作一个程序,如果某人上次输入的日期已过(某个时间范围),该程序将发送电子邮件。我的 table 是这样布置的:
employee | dept. | date | other |
bob | 1 | 2012-05-29 | abc |
bob | 1 | 2012-07-15 | xyz |
jon | 2 | 2012-05-29 | abc |
(我已按员工和日期对 mysql 进行排序) 例如,对于 Bob,我想自动将一个变量分配给日期 2012-07-15,因为这是他最后一次输入的日期。然后根据当前日期,如果提交之间的时间太长,我想发送一封电子邮件。我的问题是如何将变量分配给表中每个人的最后日期?我也愿意接受不同的更好的方法来做到这一点。谢谢。
最佳答案
要返回每个员工的最新日期,类似这样的方法就可以了。
SELECT employee
, MAX(`date`) AS latest_date
FROM mytable
GROUP BY employee
ORDER BY employee
<小时/>
附录,
正如 simbabque 指出的那样,这适用于获取最新日期,但不会返回 other
值。有几种方法可以获取结果集。
如果我们保证(员工,日期)是唯一的(例如,通过唯一约束),我们可以使用如下查询返回具有最新日期的行上的其他列:
SELECT t.employee, t.`date`, t.other
FROM mytable t
JOIN ( SELECT r.employee, MAX(r.`date`) AS latest_date
FROM mytable r
GROUP BY r.employee
) s
ON s.employee = t.employee
AND s.latest_date = t.`date`
ORDER BY t.employee
如果我们不能保证 (employee, date) 是唯一的,则此查询是不够的。但有几种方法可以解决这个问题。
关于mysql order by 然后设置最新日期的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103132/