2010-06-07 72 views
2

我的表看起來像這樣的順序..我想用這些條件計算TermID的;如果有可能也想要得到的結果集與這些頭

- TermID必須關閉或開啓狀態
- TermID狀態必須轉向開(關開)
- 狀態日期(打開狀態)必須大於大約會關閉狀態日期
SQL查詢示例

與我的問候,

 

ID  TermID Status Date 
103990107 103641 Close 28/05/2010 
104000600 103641 Open 31/05/2010 
103980976 106458 Close 26/05/2010 
103990045 106458 Open 27/05/2010 
103939537 106475 Open 18/05/2010 
103908130 117220 Open 13/05/2010 
103929653 117220 Open 13/05/2010 
103999017 117360 Open 31/05/2010 
103834814 117402 Open 05/05/2010 
103993973 117420 Open 28/05/2010 
103849795 119377 Close 05/05/2010 
103955266 119377 Close 21/05/2010 
103995229 119377 Close 29/05/2010 
103979873 119704 Open 25/05/2010 
103832225 119767 Open 04/05/2010 
103925429 123229 Close 15/05/2010 
103986986 123932 Open 27/05/2010 

+1

工作什麼數據庫... – 2010-06-07 15:38:36

+1

你怎麼知道什麼日期是'117220'最新的,和'119377'他們都標有相同的日期和狀態? – 2010-06-07 15:41:41

+1

你可能想嘗試重述你的問題。您要求統計TermID,但您還想更改TermID狀態和日期?如上所述,我不確定你想要做什麼。我會把問題分解成單獨的部分,而不是試圖一次性說明你的整個問題。 – 2010-06-07 15:47:58

回答

0

我覺得你問兩個問題在這裏:


1.如何計算所有TermID?

答案:您可以使用SQL中的count(...)聚合函數。

例子:

SELECT count(TermID) from <table> 

這將算表中的所有TermIDs。


2.如何更新我的記錄有一個新的狀態/狀態日期?

答:使用UPDATE語句:

UPDATE <table> 
SET Status = 'Open', <column name> = <value>, ... 
WHERE Staus = 'Closed' 

注意:你問題似乎含糊不清,因此上述可能無法正常工作。請根據您的具體使用情況進行調整。

+0

即結果一個termID將是'106458',因爲它在2010年5月26日首次關閉,並於2010年5月27日開放。打開狀態發生在關閉狀態之後。 我想獲得已關閉的termIDs,現在它已經打開 – qods 2010-06-07 23:47:27

0

試試這個。這將在Oracle

SELECT TermID, COUNT(*) CNT FROM 
(
SELECT ID,TermID,Status, Date, 
LEAD(Status,1,NULL) OVER (PARTITION BY TermID ORDER BY Date DESC) NEXT_STATUS, 
FROM MYTABLE 
) 
WHERE Status = 'Close' AND NEXT_STATUS = 'Open'; 
+0

如何在tsql語法中編寫此查詢 – qods 2010-06-07 23:49:02

+0

如果它支持SQL:2003中的窗口函數,它應該在T-SQL中工作。你應該能夠通過你的文檔來驗證。 – 2010-06-16 22:05:54