2013-02-14 154 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

相關問題