【发布时间】:2013-08-20 08:39:31
【问题描述】:
伙计们,我有一个表,其中有一个名为 time 的列。它捕获每个记录条目进入数据库的时间。我想查询并返回另一列,显示一个条目与其之前的条目之间的持续时间。例如,如果我在今天下午 12:00 为 john 存储记录,然后在下午 1:10 存储 Ali 的记录,我想要另一列显示 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); 函数,但现在我被卡住了。请感谢您的帮助或任何替代方案。
【问题讨论】:
-
另外,如果您在没有 PARTITION BY 的情况下执行
MAX(ROW_NUMBER()...,则最大行号将与COUNT(*)相同。因此,对于失败的第二个查询:SELECT MAX(ROW_NUMBER() OVER (ORDER BY [followuptime])) from [dbo].[FollowUp],您可以使用 -->SELECT COUNT(*) FROM dbo.Followup获得相同的结果 -
SQL Server 2012 和工作室版本 11.0.2100.60。但它的说法 LAG 不是内置函数....
-
我运行这个测试'SELECT [id],[followuptime],[remark],LAG([followuptime],1,0) OVER (ORDER BY [followuptime]) FROM [dbo] 。[跟进]; ' 但它的说法 LAG 不是一个有效的表达方式。在我执行之前它是如何识别它的。
-
我看不出有任何原因这不起作用,您确定连接到 2012 实例吗?您的查询在 SQL Fiddle 上运行良好
标签: sql sql-server database datetime sql-server-2008-r2