ama*_*rcy 46 database sql-server difference-between-rows
我有一个包含以下内容的表:
DataDate Value
2010-03-01 08:31:32.000 100
2010-03-01 08:31:40.000 110
2010-03-01 08:31:42.000 95
2010-03-01 08:31:45.000 101
. .
. .
. .
Run Code Online (Sandbox Code Playgroud)
我需要将值列乘以当前行和上一行之间的时间差,并将整数日的总和相乘.
我目前将数据设置为每10秒进行一次,这使得查询中的转换变得简单:
SELECT Sum((Value/6) FROM History WHERE DataDate BETWEEN @startDate and @endDate
Run Code Online (Sandbox Code Playgroud)
@startDate和@endDate今天的日期是00:00:00和11:59:59.
在我设置每10秒收集的数据之前,只要值发生变化,就会收集数据.时间方面没有重复条目,最小时差为1秒.
当我不知道读数之间的时间间隔时,如何设置查询以获取行之间的行时间?
我正在使用SQL Server 2005.
Qua*_*noi 135
WITH rows AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY DataDate) AS rn
FROM mytable
)
SELECT DATEDIFF(second, mc.DataDate, mp.DataDate)
FROM rows mc
JOIN rows mp
ON mc.rn = mp.rn - 1
Run Code Online (Sandbox Code Playgroud)
在SQL Server 2012+中:
SELECT DATEDIFF(second, pDataDate, dataDate)
FROM (
SELECT *,
LAG(dataDate) OVER (ORDER BY dataDate) pDataDate
FROM rows
) q
WHERE pDataDate IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
如果您不想使用子选择,则对 Quassnoi 的查询稍作调整:
SELECT
DATEDIFF(second, LAG(dataDate) OVER (ORDER BY dataDate), dataDate)
FROM rows
WHERE LAG(dataDate) OVER (ORDER BY dataDate) IS NOT NULL
Run Code Online (Sandbox Code Playgroud)