【问题标题】:MySQL: Select Most Recent Response By Max Date from JOINing TablesMySQL:从 JOINing 表中按最大日期选择最近的响应
【发布时间】:2015-11-30 21:08:11
【问题描述】:

我有一个调查表,每当该人回复调查时,它都会编译非唯一记录,因此他们可以在那里多次出现 - 我试图弄清楚如何恢复最多的那一行最近的日期。

这是person 表:

ID  First   Last     Employer
1   Jerry   Seinfeld NBC
2   Elaine  Benes    Pendant Publishing
3   George  Costanza Kruger Industrial Smoothing
4   Cosmo   Kramer   Kramerica Industries

这是survey 表:

ID  Survey  Response Date
1   9       Yes      4/14/15
1   9       No       8/9/15
2   9       No       10/13/15
3   9       No       6/19/15
3   9       Yes      2/3/15
3   8       IQ       7/27/15
4   9       Yes      5/12/15

如果 ID 重复且调查编号为 9,我只想返回最近日期的行。

这是我一直在尝试的:

SELECT p.id, p.first, p.last, p.employer, s.response, s.date
FROM person p
LEFT JOIN
    (SELECT s1.id, s1.survey, s1.response, s1.date, MAX(s1.date)
     FROM survey s1
     WHERE s1.survey = 9
     GROUP BY s1.id) AS s ON s.id = p.id
ORDER BY s.date;

但每当我这样做时,该行的最大日期和实际日期有时不匹配 - 所以MAX 函数工作正常,但仅与 ID 相关,而不是关于给我该行.但是我必须对 ID 进行分组才能正确匹配这两个表,这就是我卡住的地方。

当我尝试这样的事情时,我得到了Invalid use of group function 错误:

SELECT p.id, p.first, p.last, p.employer, s.response, s.date
FROM person p
LEFT JOIN
    (SELECT s1.id, s1.survey, s1.response, s1.date, MAX(s1.date)
     FROM survey s1
     WHERE s1.survey = 9 AND MAX(s1.date) = s1.date
     GROUP BY s1.id) AS s ON s.id = p.id
ORDER BY s.date;

我想要的结果是这样的:

ID  First   Last     Employer                    Response   Date
3   George  Costanza Kruger Industrial Smoothing Yes        2/3/15
4   Cosmo   Kramer   Kramerica Industries        Yes        5/12/15
1   Jerry   Seinfeld NBC                         No         8/9/15
2   Elaine  Benes    Pendant Publishing          No         10/13/15

【问题讨论】:

    标签: mysql date group-by max


    【解决方案1】:

    这是经过测试的查询:

    select `person`.*,`survey`.`Response`,`survey`.`Date`
    from `survey`
    inner join 
        (
          SELECT ID,max(`Date`) as `d`
          FROM `survey` 
          WHERE `Survey`=9
          group by ID
        ) as `t` on `t`.`ID` = `survey`.`ID` and 
          `t`.`d` = `survey`.`Date`
    inner join `person` on `person`.`ID` = `survey`.`ID`
    

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多