2013-04-24 38 views
0

表:GROUP BY PRIORITIZE NULL?

ID     in     out 
    1 2000-01-01 00:00:00 2000-01-01 12:00:00 
    1 2000-01-02 00:00:00     NULL 
    2 2000-01-01 00:00:00 2000-01-01 12:00:00 
    2 2000-01-02 00:00:00 2000-01-02 11:00:00 
    3 2000-01-01 00:00:00     NULL 

结果:

ID     in     out 
    1 2000-01-02 00:00:00     NULL 
    2 2000-01-02 00:00:00 2000-01-01 11:00:00 
    3 2000-01-01 00:00:00     NULL 

所以我想在的最近所有ID的并根据ID还命令他们。 我试过GROUP BY,但似乎得到了一个有价值的。

我目前所面对的是相似

SELECT * 
    FROM TABLE 
GROUP BY ID 
ORDER BY OUT IS NULL DESC, OUT DESC; 

回答

3

您需要选择合适的值,以及通过执行命令:

select t.* 
from t join 
    (select t.id, max(t.in) as maxin 
     from t 
     group by t.id 
    ) tsum 
    on t.id = tsum.id and t.in = tsum.maxin 
order by id 
+0

嗨,有另一种方式无法使用子查询?根据我的经验,子查询执行速度很慢。 – 2013-04-27 03:02:31

+0

@RjPo。 。 。在MySQL中,我不这么认为。如果你有'id,in'的索引,子查询应该很快。 – 2013-04-27 15:17:26