2012-03-07 67 views
1

我想分組的值,但我只想顯示值,如果有變化。SQL服務器2005年 - 分組值,只顯示更改

一些示例數據

value | date_loaded | 
    1 | 2012-03-07 | 
    1 | 2012-03-06 | 
    1 | 2012-03-05 | 
    3 | 2012-03-04 | 
    4 | 2012-03-03 | 
    1 | 2012-03-02 | 

所以我想,以顯示最新的值,它是最早的日期,例如

value | date_loaded | 
    1 | 2012-03-05 | 
    3 | 2012-03-04 | 
    4 | 2012-03-03 | 
    1 | 2012-03-02 | 

什麼是最好的方式去做這件事?是否有可能做一個if語句?如果值1與值2不同,則+1改爲「更改」?因此,我可以通過「change1」,「change2」等將這些值分組。

+0

嗯,我有一個自動生成的ROWNUMBER – Rexxo 2012-03-07 12:00:34

+0

任何喜悅?希望是有道理的。 – Rexxo 2012-03-07 14:00:04

+0

你可以使用'YYYY-MM-DD'這樣明確的日期格式嗎?我無法分辨這些是連續的日子還是每個月的第三天。如果有更多的行(例如'1 | 1/03/12'),你也可以描述你想要的內容嗎?你只關心最新的不重複嗎? – 2012-03-07 14:07:14

回答

2

我會用一個公用表表達式,包括基於date_loaded順序行號,然後使用一個自連接,如下所示:

CREATE TABLE #temp (
    value INT, 
    date_loaded DATETIME 
) 

INSERT INTO #temp VALUES (1,'2012-03-7') 
INSERT INTO #temp VALUES (1,'2012-03-6') 
INSERT INTO #temp VALUES (1,'2012-03-5') 
INSERT INTO #temp VALUES (3,'2012-03-4') 
INSERT INTO #temp VALUES (4,'2012-03-3') 
INSERT INTO #temp VALUES (1,'2012-03-2') 

;WITH cte AS (SELECT ROW_NUMBER() OVER (ORDER BY date_loaded) AS n, value, date_loaded FROM #temp) 
SELECT t2.value, t2.date_loaded 
FROM cte t2 LEFT JOIN cte t1 ON t2.n = t1.n + 1 
WHERE t2.value <> ISNULL(t1.value, -1) 

DROP TABLE #temp 
+0

嗯我已經修改了一下代碼,但它看起來不起作用,也沒有使用臨時表的示例(出現錯誤「Msg 102,Level 15,State 1 ,第6行 錯誤的語法附近','。「 – Rexxo 2012-03-07 14:58:41

+0

這是否適合你? – Rexxo 2012-03-07 16:03:24

+2

@exxo這是2008語法...我更新到2005年,你可以再試一次嗎? – 2012-03-07 22:31:54

相關問題