2016-11-07 46 views
0

我試圖改變這樣的事情:可能按計數分組嗎?

Index Record Time 
1  10  100 
1  10  200 
1  10  300 
1  10  400 
1  3  500 
1  10  600 
1  10  700 
2  10  800 
2  10  900 
2  10  1000 
3  5  1100 
3  5  1200 
3  5  1300 

到這一點:

Index CountSeq  Record LastTime 
1  4   10  400 
1  1   3  500 
1  2   10  700 
2  3   10  1000 
3  3   5  1300 

我想申請每唯一索引這樣的邏輯 - 我只包括三個指標來顯示結果。

因此,對於給定的索引,我想通過相同記錄的條紋來組合它們。因此,請注意索引1的前四個條目具有記錄10,但更簡潔地說,有4個條目與10條記錄在時間400結束。然後重複按順序前進的過程。

總之,我試圖對每個索引內的相同記錄的順序塊執行計數分組。換句話說,我不尋找此:

select index, count(*) as countseq, record, max(time) as lasttime 
from Table1 
group by index,record 

其中由相同的記錄,而我希望他們通過序列斷裂分離結合的一切。

有沒有辦法在SQL中做到這一點?

回答

0

沒有一個主鍵很難解決你的問題,所以我假設你有一個主鍵列來增加每行(primkey)。該請求將與具有值爲1的「差異」列返回相同的表,如果以前的primkey行具有相同的索引和記錄作爲當前一個,否則爲0:

SELECT *, 
IF((SELECT index, record FROM yourTable p2 WHERE p1.primkey = p2.primkey) 
= (SELECT index, record FROM yourTable p2 WHERE p1.primkey-1 = p2.primkey), 1, 0) as diff 
FROM yourTable p1 

如果你使用一個臨時變量每次IF表達式爲假的增加,你會得到的結果是這樣的:

primkey Index Record Time diff 
1  1  10  100  1 
2  1  10  200  1 
3  1  10  300  1 
4  1  10  400  1 
5  1  3  500  2 
6  1  10  600  3 
7  1  10  700  3 
8  2  10  800  4 
9  2  10  900  4 
10  2  10  1000 4 
11  3  5  1100 5 
12  3  5  1200 5 
13  3  5  1300 5 

這將解決你的問題,你只需通過子句添加「差異」的組。 不幸的是,我不能在sqlite上測試它,但你應該可以使用變量like this。 這可能是一個骯髒的解決方法,但我找不到更好的方法,希望它有幫助。

+0

這將組_all_記錄,而不僅僅是_sequential_記錄。該要求沒有明確說明,但可以從預期結果中推斷出來。 –