伙计们,我有一张桌子,有一列名为时间的列。它捕获每个记录进入数据库的时间。我想查询并返回另一列,该列显示一个条目与其之前的条目之间的持续时间。例如,如果我今天在12:00 pm存储john的记录,然后在1:10 pm存储Ali的记录,则我想要另一列显示01:10:00的列(即HH:MM:SS)。

我知道我可以按如下方式查询每个列号。

SELECT ROW_NUMBER() OVER (ORDER BY [followuptime]) from [dbo].[FollowUp] .

我想查询最大行数AS,但它失败并返回错误“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;

Example on SQL Fiddle

10-06 03:13