Sql server 计算日期之间的分钟数

Sql server 计算日期之间的分钟数,sql-server,Sql Server,我需要帮助将下面的excel逻辑转换为SQL子查询。非常感谢你的帮助 C列 第2排)12月10日下午4:24 第3排)12月10日下午4:25 第4排)12月10日下午4:26 第5排)12月10日下午7:27 累积分钟数 第2行)2 第3行)1 第4行)1 第5行)45 Excel公式 第2行)=如果((C3-C2)>45,45,(C3-C2)*1440) 第3行)=如果((C4-C3)>45,45,(C4-C3)*1440) 第4行)=如果((C5-C4)>45,45,(C5-C4

我需要帮助将下面的excel逻辑转换为SQL子查询。非常感谢你的帮助

C列

  • 第2排)12月10日下午4:24
  • 第3排)12月10日下午4:25
  • 第4排)12月10日下午4:26
  • 第5排)12月10日下午7:27
累积分钟数

  • 第2行)2
  • 第3行)1
  • 第4行)1
  • 第5行)45
Excel公式

  • 第2行)=如果((C3-C2)>45,45,(C3-C2)*1440)
  • 第3行)=如果((C4-C3)>45,45,(C4-C3)*1440)
  • 第4行)=如果((C5-C4)>45,45,(C5-C4)*1440)
  • 第5行)=如果((C6-C5)>45,45,(C6-C5)*1440)
    • 这个怎么样:

      WITH CTE(RowNumber, Date) AS(
      select 1, '2012-01-10 16:22' union
      select 2, '2012-01-10 16:24' union
      select 3, '2012-01-10 16:25' union
      select 4, '2012-01-10 16:26' union
      select 5, '2012-01-10 19:27'
      )
      select b.Date, IIF(DATEDIFF(minute, a.Date, b.Date) > 45, 45, DATEDIFF(minute, a.Date, b.Date)) as AccumulatedMinutes
      from CTE b left outer join CTE a on a.RowNumber = b.RowNumber - 1
      
      它返回:

      2012-01-10 16:22    NULL
      2012-01-10 16:24    2
      2012-01-10 16:25    1
      2012-01-10 16:26    1
      2012-01-10 19:27    45
      
      这个怎么样:

      WITH CTE(RowNumber, Date) AS(
      select 1, '2012-01-10 16:22' union
      select 2, '2012-01-10 16:24' union
      select 3, '2012-01-10 16:25' union
      select 4, '2012-01-10 16:26' union
      select 5, '2012-01-10 19:27'
      )
      select b.Date, IIF(DATEDIFF(minute, a.Date, b.Date) > 45, 45, DATEDIFF(minute, a.Date, b.Date)) as AccumulatedMinutes
      from CTE b left outer join CTE a on a.RowNumber = b.RowNumber - 1
      
      它返回:

      2012-01-10 16:22    NULL
      2012-01-10 16:24    2
      2012-01-10 16:25    1
      2012-01-10 16:26    1
      2012-01-10 19:27    45
      

      你试过什么?第一排是什么?Excel公式与您的问题有什么关系?您想知道DateDiff或如何运行total查询或两者都有?您尝试过什么?第一排是什么?Excel公式与您的问题有什么关系?您想知道DateDiff或如何运行总计查询或两者都有吗?谢谢,Chrisb。如何防止表达式计算空值?我尝试了以下方法,但失败了。有什么想法吗?求和(如果DATEDIFF(分钟,ISNULL(b.Date,a.Date),ISNULL(b.Date,a.Date))>45,那么其他45个DATEDIFF(分钟,ISNULL(a.Date,b.Date),ISNULL(b.Date,a.Date))结束时作为“累计分钟数”,用ISNULL包装IIF()将得到0-ISNULL(IIF(…),0)谢谢,Chrisb。如何防止表达式计算空值?我尝试了以下方法,但失败了。有什么想法吗?求和(当DATEDIFF(分钟,ISNULL(b.Date,a.Date),ISNULL(b.Date,a.Date))>45,然后45其他DATEDIFF(分钟,ISNULL(a.Date,b.Date),ISNULL(b.Date,a.Date))结束时,将IIF()包装为ISNULL(IIF(…),0)