0

给定一张桌子:

id | timestmap | ..otherstuff..

带有主键(id,timestmap)。其中 id 是整数类型,timestamp 是时间戳。

如何提取时间戳是该元组最新的所有元组?

例如,如果这是当前数据:

1 | 1999-05-23 0:00 | ...
2 | 2000-05-23 0:00 | ...
1 | 2000-06-22 0:00 | ...

我希望结果完全正确(尽管订单是我不完全关心的奖励)

1 | 2000-06-22 0:00 | ...
2 | 2000-05-23 0:00 | ...
4

3 回答 3

1

对于这样的情况,我使用窗口函数

作为示例,假设您的表名为 foo,此查询将起作用:

WITH tmp as (
    SELECT id, timestmap, rank() OVER (PARTITION BY id ORDER BY timestmap desc) FROM foo
)
SELECT id, timestmap FROM tmp WHERE rank=1;
于 2013-08-07T11:05:43.013 回答
0

怎么样:

SELECT id, timestamp_col, otherstuff from your_table
order by timestamp_col desc

?

于 2013-08-07T10:48:34.193 回答
0

嗯......唯一的方法是通过自加入:

SELECT id, timestamp_col, otherstuff 
  FROM table1 AS t1
 NATURAL JOIN
  (SELECT id, MAX(timestamp_col) AS timestamp_col 
     FROM table1 GROUP BY id) AS t2;

这是凭记忆的,有些细节可能不正确。请记住,它并不是真正的高性能(在第一个 SELECT 之前使用 EXPLAIN 来查看实际成本)。

于 2013-08-07T10:56:57.400 回答