当前位置: 首页 > 面试题库 >

SQL Server DATEDIFF计算行之间的列

孟花蜂
2023-03-14
问题内容

我目前有一个与此类似的表格-

RecordTime                    Running     Fault
-----------------------------------------------
2016-09-15 11:32:01.00        0           202
2016-09-15 11:32:08.00        1           202
2016-09-15 11:39:31.00        0           21
2016-09-15 11:40:07.00        1           4
2016-09-15 11:42:11.00        0           21
2016-09-15 11:42:39.00        1           45

然后,我想计算每个记录的RecordTimes之间的时间差。为此,我正在使用以下内容-

WITH    rows AS
        (
        SELECT  *, ROW_NUMBER() OVER (ORDER BY RecordTime) AS rn
        FROM    dbo.Table1
        )
SELECT  DATEDIFF(second, mc.RecordTime, mp.RecordTime)
FROM    rows mc
JOIN    rows mp
ON      mc.rn = mp.rn - 1

哪个返回-

(No column name)
----------------
7
443
36
124
28
303

不过,我实际上要做的是在原始表中创建一个计算列,该列为我提供了这些值。这可能吗?

我以为我可以将查询转换为UDF,然后在列中进行引用,但是我对这种工作不是很有经验。

- -编辑 - -

最终结果应为-

RecordTime                    Running     Fault     Diff
--------------------------------------------------------
2016-09-15 11:32:01.00        0           202       7
2016-09-15 11:32:08.00        1           202       443
2016-09-15 11:39:31.00        0           21        36
2016-09-15 11:40:07.00        1           4         124
2016-09-15 11:42:11.00        0           21        28
2016-09-15 11:42:39.00        1           45        303

问题答案:

我建议您为此使用视图:

CREATE VIEW Table1_vw 
AS
WITH cte AS (
    SELECT  *, 
            ROW_NUMBER() OVER (ORDER BY RecordTime) AS rn
    FROM    dbo.Table1
)
SELECT  mc.RecordTime,
        mc.Running,
        mc.Fault,
        DATEDIFF(second, mc.RecordTime, mp.RecordTime) Diff
FROM cte mc
LEFT JOIN cte mp
ON mc.rn = mp.rn - 1

由于您使用的是 SQL Server 2012 ,因此可以使用LEAD函数:

CREATE VIEW Table1_vw 
AS
SELECT  RecordTime,
        Running,
        Fault,
        DATEDIFF(second,RecordTime,LEAD(RecordTime,1,NULL) OVER (ORDER BY RecordTime ASC) ) as Diff
FROM Table1
GO


 类似资料:
  • 问题内容: 我有一个带有StartDate列的表,我想计算两个连续记录之间的时间差。 谢谢。 @ Mark Byers和@ Yahia,我将请求表作为requestId,startdate 我想知道requestid 1和2、2和3、3和4等之间的时差是多少。我知道我需要在表上进行自我连接,但是我在子句上没有得到正确的支持。 问题答案: 要实现您的要求,请尝试以下操作(从OP编辑后进行更新): 如

  • 问题内容: 问题 我仍在用SQL寻找自己的脚,并尝试计算某个用户在轮班期间扫描项目多长时间。 每次扫描都带有时间戳,生成唯一的9位数序列号( SEQ 列)和格式( THE_DATE 列)的日期/时间。 这个人可能正在扫描几个小时,我想做的是从轮班结束时的最后一个时间戳减去他们生成的第一个时间戳。 因此,例如,给出此数据样本: 期望的结果 我想从出现的最后一行减去Mike Derry的第一行的时间戳

  • 问题内容: 我有一条流经多个系统的消息,每个系统都会记录消息的进入和退出以及时间戳和uuid messageId。我通过以下方式提取所有日志: 结果,我现在有以下事件: 我想生成一个报告(最好是堆积的条或列),用于每个系统的时间: 做这个的最好方式是什么?Logstash过滤器?kibana计算字段? 问题答案: 您只能使用Logstash 过滤器来实现此目的,但是,您必须实质性地重新实现该过滤器

  • 我试图使用Scala类计算两点之间的距离。但它给出了一个错误说 类型不匹配;发现:其他。需要类型(具有基础类型点):?{def x:?}请注意,隐式转换不适用,因为它们是不明确的:在[A](x:A)类型的对象Predef中确保[A]的方法any2Ensuring和在[A](x:A)“ArroAssoc[A]类型的对象Predef中的方法Ani2ArrowasSoc都是可能的其他转换函数。输入到?{

  • 问题内容: 在python中,如何引用上一行并针对它计算一些内容?具体来说,我有工作在-我有一个数据帧全的股票价格信息,看起来像这样: 这是我创建此数据框的方法: 从第2行开始,或者在这种情况下,我想是250(PS- 是索引吗?),我想为此数据帧中的每个条目计算2011-01-03和2011-01-04之间的差。我相信适当的方法是编写一个函数,该函数采用当前行,然后找出前一行,并计算它们之间的差,

  • 问题内容: 我有一个熊猫数据框如下 上面的数据帧有83000行。我想获取两个连续行之间的时间差,并将其保存在单独的列中。理想的结果是 我已经尝试过但出现错误,如下所示 如何解决这个问题 问题答案: 问题是功能需要s或s ,因此首先要转换为,然后得到并除以: 如果需要或每分钟: