伙计们,我有一个表,其中有一列名为时间。它捕获数据库中每个记录条目的时间。我想查询并返回另一列,显示一个条目与其之前的条目之间的持续时间。例如,如果我在今天中午 12:00 存储约翰的记录,然后在下午 1:10 存储阿里的记录,我想要另一列显示 01:10:00(即 HH:MM:SS)。
我知道我可以按如下方式查询每个列号。
SELECT ROW_NUMBER() OVER (ORDER BY [followuptime]) from [dbo].[FollowUp] .
我想如下查询最大行号,但它失败并返回错误“windowed...”
SELECT MAX(ROW_NUMBER() OVER (ORDER BY [followuptime])) from [dbo].[FollowUp] .
我想使用 sql 的 DATEDIFF(interval,start_time,end_time);
函数,但就像现在一样,我被卡住了。请感谢您的帮助或任何替代方案。
最佳答案
由于 SQL-Server 2008R2 不支持 LAG/LEAD,您需要使用 row_number 进行自连接以获取上一行的时间:
WITH OrderedResults AS
( SELECT [id],
[followuptime],
[remark],
RowNumber = ROW_NUMBER() OVER (ORDER BY [followuptime])
FROM [dbo].[FollowUp]
)
SELECT a.ID,
a.FollowUpTime,
a.Remark,
PreviousTime = b.FollowUpTime,
MinutesDifference = DATEDIFF(MINUTE, b.FollowUpTime, a.FollowUpTime)
FROM OrderedResults a
LEFT JOIN OrderedResults b
ON b.RowNumber = a.RowNumber - 1
ORDER BY a.FollowUpTime;
关于sql - 计算sql中条目之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18330600/