SQL查询最大时间,字符串上的组不包括具有空时间行的组

时间:2012-02-10 02:42:21

标签: sql null group-by max

我知道有很多关于通过使用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。

2 个答案:

答案 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