Sql server 计算日期之间的分钟数
我需要帮助将下面的excel逻辑转换为SQL子查询。非常感谢你的帮助 C列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
- 第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
- 第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)