2013-02-14 113 views
1

我需要帮助将下面的excel逻辑转换为SQL子查询。非常感激你的帮助。计算日期之间的分钟

列C

  • 行2)12年10月1日下午4点24
  • 行3)12年10月1日4:25 PM
  • 行4)12年10月1日下午4时26
  • 行5)12年10月1日下午7时27

累计分钟

  • 行2)2
  • 行3)1
  • 行4)1
  • 第5行)45

Excel公式

  • 行2)= IF((C 3 -C C2)> 45,45,(C3-C2)* 1440)
  • 第3行= IF((C4-C3)> 45,45,(C4-C3)* 1440)
  • 第4行= IF ((C5-C4)> 45,45,(C5-C4)* 1440)
  • 第5行)= IF((C6-C5)> 45,45,(C6-C5)* 1440)
+0

你试过了什么?第1行是什么? Excel公式与你的问题有什么关系? – HABO 2013-02-14 23:22:42

+0

你想知道DateDiff或如何执行总查询或两者? – 2013-02-14 23:24:09

回答

1

这样如何:

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 
+0

谢谢,克里斯布。你如何防止表达式计算NULL值?我尝试了以下,但失败了。有任何想法吗? (分钟,ISNULL(b.Date,a.Date),ISNULL(b.Date,a.Date))> 45 \t \t THEN 45 ELSE DATEDIFF(minute,ISNULL(a.Date,a.Date) ()),ISNULL(b.Date,a.Date))END)as'AccumulatedMinutes' – N00b 2013-02-18 02:05:48

+0

用ISNULL包装IIF()会给你0 - ISNULL(IIF(...),0) – chrisb 2013-02-18 17:38:43

相关问题