SQL 选择最近 date/time 的唯一关键字段
SQL selecting unique key field with most recent date/time
我的 SQL 服务器数据库中有一个 table,其中包含一个电表列表及其读数和一个 date/time 标记。
基本架构是一个 PointID 列、一个 Date/Time 列和一个值列。点 ID 是关键,因此 table 包含每个带有半小时值和时间戳的 PointID 的多个条目。
For example:
PointID, Time, Value
132237 2015-06-19 22:00:00.000 46
132237 2015-06-19 22:15:00.000 52
132237 2015-06-19 22:30:00.000 64
154433 2015-06-19 22:45:00.000 41
154433 2015-06-19 23:00:00.000 44
154433 2015-06-19 23:15:00.000 45
154433 2015-06-19 23:30:00.000 47
我正在尝试从每个唯一的 PointID 向 select 最近的行编写查询,但是我无法有效地执行此操作,而不必 select 整个数据库,按 desc 排序和限制1.
有人能帮忙吗?
谢谢
;WITH CTE AS (
SELECT PointID, Time, Value, ROW_NUMBER() OVER (PARITITION BY PointID ORDER BY Time DESC) AS RN
FROM <YOUR TABLE>
)
SELECT PointID, Time, Value
FROM CTE
WHERE RN = 1
我没想到 - 如果使用 SQL Server 2005 或更高版本,这样的事情应该可行。
您可以使用 SQL 中的 MAX()
和 GROUP BY
来获取它。
SELECT POINTID,MAX(VALUE)
FROM table
GROUP BY POINTID
我的 SQL 服务器数据库中有一个 table,其中包含一个电表列表及其读数和一个 date/time 标记。
基本架构是一个 PointID 列、一个 Date/Time 列和一个值列。点 ID 是关键,因此 table 包含每个带有半小时值和时间戳的 PointID 的多个条目。
For example:
PointID, Time, Value
132237 2015-06-19 22:00:00.000 46
132237 2015-06-19 22:15:00.000 52
132237 2015-06-19 22:30:00.000 64
154433 2015-06-19 22:45:00.000 41
154433 2015-06-19 23:00:00.000 44
154433 2015-06-19 23:15:00.000 45
154433 2015-06-19 23:30:00.000 47
我正在尝试从每个唯一的 PointID 向 select 最近的行编写查询,但是我无法有效地执行此操作,而不必 select 整个数据库,按 desc 排序和限制1.
有人能帮忙吗?
谢谢
;WITH CTE AS (
SELECT PointID, Time, Value, ROW_NUMBER() OVER (PARITITION BY PointID ORDER BY Time DESC) AS RN
FROM <YOUR TABLE>
)
SELECT PointID, Time, Value
FROM CTE
WHERE RN = 1
我没想到 - 如果使用 SQL Server 2005 或更高版本,这样的事情应该可行。
您可以使用 SQL 中的 MAX()
和 GROUP BY
来获取它。
SELECT POINTID,MAX(VALUE)
FROM table
GROUP BY POINTID