2011-01-19 67 views
0

我想查询最近的一排为每个值在一列X.如何查询列X中每个值的最近行?

我现在的尝试是:

SELECT max(mytimestamp), mytable.* FROM mytable GROUP BY X 

,但同时在结果第一列包含了最新的时间标记,其他列不是来自最近的行。

我该如何解决这个问题?

回答

2
SELECT M.* 
from 
(
SELECT X, max(mytimestamp) MaxT 
FROM mytable 
GROUP BY X 
) N 
inner join mytable M on M.X = N.X and M.mytimestamp = N.MaxT 

尽管MySQL允许您在GROUP BY查询中混合使用聚合列和非聚合列,但请不要。考虑情景类似,你有什么:

SELECT max(mytimestamp) MaxT, min(mytimestamp) MinT, mytable.* 
FROM mytable 
GROUP BY X 

想想看,让我知道列应该来自哪个记录(提示:最大或最小)。

0

这只涉及一张表吗?那么,为什么不这样:

select * from mytable order by mytimestamp desc limit 1 
+0

因为我需要在列X中的每个不同值的结果 – arturh 2011-01-19 11:22:34

0

我不认为你需要通过群组:

SELECT MAX(时间戳),MYTABLE * FROM MYTABLE LIMT 1;

+0

我需要列X中每个不同值的结果 – arturh 2011-01-19 11:22:56

+0

正确 - 您从未在您的问题中说过!或者至少不清楚。示例输出和示例数据将有帮助 – diagonalbatman 2011-01-19 13:13:31

相关问题