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”