我的SQL Server数据库中有一个表,其中包含能量计的列表及其读数和日期/时间戳。
基本架构是PointID列,日期/时间列和值列。点ID是密钥,因此该表包含每个具有半小时值和时间戳的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中选择最近的行,但是在无需选择整个数据库的情况下无法有效地执行此操作,按desc排序并限制为1.
有人可以帮忙吗?
由于
答案 0 :(得分:2)
您可以使用SQL中的MAX()
和GROUP BY
来获取它。
SELECT POINTID,MAX(VALUE)
FROM table
GROUP BY POINTID
答案 1 :(得分: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或更高版本,那么这样的事情应该会有用。