sql - 计算sql中条目之间的时间

标签 sql sql-server database datetime sql-server-2008-r2

伙计们,我有一个表,其中有一列名为时间。它捕获数据库中每个记录条目的时间。我想查询并返回另一列,显示一个条目与其之前的条目之间的持续时间。例如,如果我在今天中午 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;

Example on SQL Fiddle

关于sql - 计算sql中条目之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18330600/

相关文章:

sql-server - Excel 自动化 - 刷新查询时禁用 SQL 登录对话框

sql - 搜索大数据表

sql - 重叠时间间隔 : Select "all busy" periods

sql - 如何插入带有子查询的多行作为值之一?

python - SQLITE3 插入错误

sql-server - SQL Server 中默认的锁定粒度是多少?

SQLITE更新查询失败

sql - 比较 2 个不同的数据库表列

php - 检索 mySQL PHP 列的计数

sql - 如何解决此 SQL 代码中的 ORA-00918 错误