限制组后的行数

时间:2016-04-06 03:01:17

标签: sql-server database

我对数据库查询知之甚少。例如,我有一个这样的表。

id | timestamp | lat   | lon
------------------------------
1  | 2016-04-06|-27.438|153.076
1  | 2016-04-03|-27.346|152.456
1  | 2016-04-04|-23.678|155.789
2  | 2016-04-04|-27.438|178.076
3  | 2016-04-04|-26.438|167.076
2  | 2016-04-05|-24.438|123.076

我用过:

SELECT * FROM table order by [Timestamp]DESC

DESC顺序返回所有数据。但我需要从mssql查询中获取每个timestamp的最大id行。例如:

id | timestamp | lat   | lon
--------------------------------
1  | 2016-04-06|-27.438|153.076
2  | 2016-04-05|-24.438|123.076
3  | 2016-04-04|-26.438|167.076

2 个答案:

答案 0 :(得分:4)

使用ROW_NUMBER

SELECT
    id, timestamp, lat, lon
FROM (
    SELECT *,
        rn = ROW_NUMBER() OVER(PARTITION BY id ORDER BY timestamp DESC)
    FROM yourTable
) t
WHERE rn = 1

答案 1 :(得分:2)

使用row_number()按ID

获取最新时间戳
SELECT *
FROM
(
    SELECT *, R = ROW_NUMBER() OVER (PARTITION BY id ORDER BY timestamp DESC)
    FROM   yourtable
) D
WHERE R = 1