我有3列,'url_id','timestamp'和'o'。我需要按'url_id'进行分组,然后按最新的时间戳排序。
表“示例”
timestamp | url_id | o
----------------------------
2000 | 1 | 50
2007 | 1 | 70
2011 | 1 | 90
2001 | 2 | 20
2006 | 2 | 50
2009 | 2 | 40
2011 | 2 | 10
'o'是我想要的最终价值。我试图用子查询来做这个,但是保持得到最老的值(按顺序尝试,没有运气)。
我做错了什么?我正在寻找的实际上是否需要子查询?
答案 0 :(得分:4)
SELECT url_id
, MAX(timestamp) AS currentTS
FROM yourTable
GROUP BY url_id
ORDER BY currentTS DESC
Aftre你最后的解释,我认为你需要将上述查询加入原始表格,如下所示:
SELECT y.timestamp
, y.url_id
, y.o
FROM yourTable y
JOIN
( SELECT url_id
, MAX(timestamp) AS currentTS
FROM yourTable
GROUP BY url_id
) AS grp
ON grp.url_id = y.url_id
AND grp.currentTS = y.timestamp
ORDER BY y.timestamp DESC
注意:如果有两个(或更多)行具有相同的url_id和相同的时间戳,则它们都会(或全部)出现在结果中。