【发布时间】: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
【问题讨论】: