簡體   English   中英

SQL Server 2005分組值,僅顯示更改

[英]SQL server 2005 grouping values, display only changes

我進行了一些更新后再次發布。

我正在嘗試對一組值進行分組,但是我只想在發生更改時顯示這些值。

假設該值在1到4到3到1到1到1之間波動。

一些示例數據

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 |

我想顯示每個值的波動順序,但將它們組合在一起。 因此,您只會按順序看到1、4、3、1,而不是最近的三個1。

因此,我想顯示最早的日期的最新值,例如

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”等對值進行分組?

SELECT VALUE,MIN(date_loaded)
FROM  YOURTABLE
GROUP BY VALUE;

該解決方案有點復雜,但可以解決問題。 不幸的是,我並沒有掌握所有代碼,但是以下是入門的概念方法:

首先,選擇一個包含row_counter的臨時表。 像這樣:

(SELECT value, date_loaded, row_number() over (partition by date_loaded) as rowNum FROM yourTable) as tempTable1

然后使用某種while循環,根據上面的臨時表(tempTable1)的行數(tempTableCount)進行迭代。 此循環將一次遍歷該臨時表一行,然后將該行插入到新的臨時表中。 每次插入后,您都將跟蹤先前插入的值並增加行計數器。 如果值更改,則執行插入操作,否則繼續循環。

我的語法可能相差很遠(很抱歉,不是在裝有sql的計算機上),但是從概念上講:

WHILE loopRowCount <= tempTableCount
BEGIN

IF(@previousValue <> (SELECT value from tempTable WHERE rowNum = loopRowCount))
BEGIN
    INSERT INTO tempTable2
    (value, date_loaded)
        (SELECT value, date_loaded FROM tempTable WHERE rowNum = loopRowCount)
END

set @previousValue = (SELECT value FROM tempTable WHERE rowNum = loopRowCount)
loopRowCount = loopRowCount + 1
END

假設您在語法錯誤彈幕中幸存下來,您的tempTable2將包含所需的結果。 我會在早上嘗試將其清理干凈,但這是今晚我最好的選擇! 請享用! xD

怎么樣:

;WITH data AS
(
SELECT 1 as [value],'2012-03-07' as date
UNION ALL SELECT 1,'2012-03-06'
UNION ALL SELECT 1,'2012-03-05'
UNION ALL SELECT 3,'2012-03-04'
UNION ALL SELECT 4,'2012-03-03'
UNION ALL SELECT 1,'2012-03-02'
)
,data2 AS
(
SELECT 
[Value]
,date
,row_number() OVER (ORDER BY (SELECT NULL)) as row1
FROM data
)
,data3 AS
(
SELECT * 
, row1 - row_number() OVER (ORDER BY [Value]) as row2
from data2
)
SELECT 
MIN([Value]) AS [Value]
,MIN(Date) as Date
FROM data3
GROUP BY [Value] - row2
ORDER BY MIN(row1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM