Mysql 从Select max()查询中获取正确的行结果
可用性表为Mysql 从Select max()查询中获取正确的行结果,mysql,Mysql,可用性表为 | avail_id | emp_id | effective_date | Friday | Saturday | Sunday | | 0 | 15 | 2016-07-14 | Yes | Yes | No | | 1 | 15 | 2016-06-14 | Yes | Yes | Yes | | 2 | 12 | 20
| avail_id | emp_id | effective_date | Friday | Saturday | Sunday |
| 0 | 15 | 2016-07-14 | Yes | Yes | No |
| 1 | 15 | 2016-06-14 | Yes | Yes | Yes |
| 2 | 12 | 2016-07-01 | Yes | No | No |
| 3 | 12 | 2016-07-14 | Yes | Yes | Yes |
| 4 | 17 | 2016-05-14 | No | Yes | Yes |
| 5 | 17 | 2016-06-14 | Yes | Yes | Yes |
| 6 | 17 | 2016-07-14 | Yes | No | No |
我一直在尝试以下查询的各种版本
SELECT Availability.emp_id, max(Availability.effective_date), Availability.friday, Availability.saturday, Availability.sunday Employees.emp_fname, Employees.emp_lname FROM Availability LEFT JOIN Employees ON Availability.emp_id = Employees.emp_id WHERE Employees.active='Yes' GROUP BY Availability.emp_id ORDER BY Employees.position_id, Employees.emp_lname, Employees.emp_fname, Availability.effective_date DESC
我的目标是为每位员工选择具有最新可用性的行,并最终能够选择在给定日期适用的可用性*。不幸的是,我得到的结果将是混合可用性表中每个员工第一行的值。例如,它将给出员工15的生效日期2016-07-14,但会给出与2016-06-14生效日期相对应的其他列值
*员工可以在3周内提交新的可用性报告,但在运行今天的报告时,我想要的是今天适用的内容,而不是3周内。此外,没有适用于所有员工的新可用性的设定日期 可能是您可以在max上的in子句中使用的
SELECT
Availability.emp_id
, Availability.friday
, Availability.saturday
, Availability.sunday
, Employees.emp_fname
, Employees.emp_lname
FROM Availability
LEFT JOIN Employees ON Availability.emp_id = Employees.emp_id
WHERE Employees.active='Yes'
AND (Availability.emp_id, Availability.effective_date ) in
( select Availability.emp_id , max(Availability.effective_date)
FROM Availability group by Availability.emp_id )
ORDER BY
Employees.position_id
, Employees.emp_lname
, Employees.emp_fname
, Availability.effective_date DESC
可能是您可以在max上的子句中使用的
SELECT
Availability.emp_id
, Availability.friday
, Availability.saturday
, Availability.sunday
, Employees.emp_fname
, Employees.emp_lname
FROM Availability
LEFT JOIN Employees ON Availability.emp_id = Employees.emp_id
WHERE Employees.active='Yes'
AND (Availability.emp_id, Availability.effective_date ) in
( select Availability.emp_id , max(Availability.effective_date)
FROM Availability group by Availability.emp_id )
ORDER BY
Employees.position_id
, Employees.emp_lname
, Employees.emp_fname
, Availability.effective_date DESC
这起作用了。并添加“WHERE Availability.effective_date”和“WHERE Availability.effective_date”