我知道有很多关于通过使用max的问题,但是我保证这个问题比较棘手。 (好的...所以它很容易被回答<10分钟)
这是一个示例表
|ID|name| end_time |
|01|Bob |2012-02-09 3:00:00|
|02|Bob |2012-02-09 3:15:00|
|03|Ted |2012-02-09 3:00:00|
|04|Ted |null |
我想要的是返回按名称分组的最长时间,但不包括具有null end_time的名称。
我从
开始SELECT * FROM table t,(
SELECT MAX(end_time), name FROM table
GROUP BY name
) last_entry
WHERE t.name = last_entry.name
AND t.end_time = last_entry.end_time
问题是,这给了我ID 02和03,而我希望它只返回02。
答案 0 :(得分:3)
如果我正确理解了您的问题,您可以通过在任何其他行中排除具有空结束时间的名称来解决它:
SELECT MAX(end_time), name
FROM table t
WHERE NOT EXISTS (
SELECT 1
FROM table tt
WHERE end_time is null AND tt.name=t.name
)
GROUP BY name
答案 1 :(得分:0)
尝试这个,在寻找最大日期时,您不需要组中的名称。
SELECT * FROM table t,(
SELECT MAX(end_time) FROM table
) last_entry
WHERE t.end_time = last_entry.end_time