2012-12-12 17 views
0

我正在MS SQL上工作。任何人都知道如何派生consecutive_d列?無論何時,連續日期應完全基於ENTER_DT。而且,如果員工在同一天進入很多次,則仍然連續計爲一天。如何編寫SQL語句以派生連續工作日?

PASS_M| ENTER_DT................|CONSECUTIVE_D 
Boo K K 5/1/2012 11:55:00 PM  1 
Boo K K 5/2/2012 11:30:00 PM  2 
Boo K K 5/4/2012 10:30:00 AM  1 
LIAW S  4/30/2012 11:48:52 PM  1 
LIAW S  5/1/2012 00:11:07 AM  2 
LIAW S  5/1/2012 12:32:07 AM  2 
LIAW S  5/1/2012 4:42:02 AM  2  
LIAW S  5/2/2012 1:10:09 AM  3 
LIAW S  5/2/2012 1:43:06 AM  3 
LIAW S  5/4/2012 2:17:47 AM  1 

更新:這是我曾嘗試:從日期時間中提取它

SELECT PASS_M, ENTRY_DT, DATEDIFF(D, MIN(ENTRY_DT) OVER (PARTITION BY PASS_M), ENTRY_DT) + 1 AS CONSECTUTIVE_DAYS 
INTO   TEMP_TARGET 
FROM   TEMP_5 
ORDER BY PASS_M, ENTRY_DT; 
+0

哦,我總是如果它有幫助的話,我總是投票。如果它確實有幫助,但它不是我的qns的答案呢?我做什麼? sry我是一個新手 – 10e5x

+0

如果沒有答案是「答案」,但你找出答案,那麼你應該發佈你自己的答案與決議並將其標記爲答案。 –

+0

對於這個特定的問題,你有什麼嘗試? –

回答

1

使用

SELECT *, CONVERT(DATE,GETDATE()) AS DateOnly, SUM(CONSECUTIVE_D) as CONSECUTIVE_SUM GROUP BY DateOnly;

這允許您按日期族元素和那麼CONSECUTIVE_D的總和將爲CONSECUTIVE_SUM


我希望這就是你要找的人:)

你可以從這個建立自己的自定義查詢!
請求的更新,

SELECT 
PASS_M, 
ENTRY_DT, 
(DATEDIFF(D, MIN(ENTRY_DT) OVER (PARTITION BY PASS_M), ENTRY_DT) + 1) AS CONSECTUTIVE_DAYS, 
CONVERT(DATE,ENTRY_DT) AS DateOnly, 
SUM(CONSECUTIVE_DAYS) as CONSECUTIVE_SUM 

INTO   TEMP_TARGET 
FROM   TEMP_5 
GROUP BY DateOnly 
ORDER BY PASS_M; 


在我的頭上,認爲應該做的伎倆!不要ORDER BY ENTRY_DT,你現在要GROUP BY DateOnly

這裏有一個關於如何Turn datetime into date :)

+0

嗨,我已經嘗試過,但它不起作用。也許是因爲我不知道如何申請。你介意改變你的解決方案嗎? – 10e5x

+0

嗨,再次嘗試urs之後,我收到了CONSECUTIVE_D和DateOnly的無效列名稱。我也有一個錯誤「類型日期不是一個定義的系統類型」我正在使用SQL Server 2005 – 10e5x

+0

哦,我認爲你使用的是更新的版本!在我遞交的鏈接中使用2005版的日期時間轉換。別忘了你用ENTRY_DT替換getDate()!一切都應該工作得很好;) – marctrem

1

我會截斷日期,trunc_date(enter_dt)鏈接,然後用GROUP BY或PARTITION BY計重複值。

編輯:對於SQL Server,如Aaron提到的,使用cast(getDate() As Date) note trunc_date。在寫這篇文章的時候,這個人有33%的接受度,所以我不想太想。 :)

+0

'trunc_date'?在SQL Server中? –

+0

我沒有意識到我應該將帖子標記爲答案,即使它不回答我的qns,但幫助我獲得我想要的。我總是投票。現在我知道了,我會接受那些幫助我推導出答案併發布我的解決方案的人。如果兩者都是正確的答案呢? – 10e5x

+1

@ 10e5x:這可能是針對另一個線索的,但如果其他帖子沒有回答您的問題,「您做了正確的事情」。當你問得更多時,我認爲你會發現大部分人得到回答,你的比例會提高。 上下文是,許多新用戶甚至不標記正確的答案,所以未來的訪問者不知道什麼解決了海報問題。 –