SQL查询分组依据和按时间戳排序

时间:2011-04-10 09:34:54

标签: php mysql sql

嘿伙计们,我试图做到这一点,但我不能,也许你可以指出我正确的方向

我有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'是我想要的最终价值。我试图用子查询来做这个,但是保持得到最老的值(按顺序尝试,没有运气)。

我做错了什么?我正在寻找的实际上是否需要子查询?

1 个答案:

答案 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和相同的时间戳,则它们都会(或全部)出现在结果中。