|
我在Microsoft SQL Server 2008
# i, t% d! i2 l: Q9 n5 ^R上面有个名字DATA的表,具有三个不可为空的整数字段:ID,Sequence和Value。具有相同ID序列值将是连续的,但可以从任何值开始。我需要一个查询,它将返回相同的ID和值连续行的计数。
" m4 B& G& q9 d( G假设我有以下数据:
2 w5 p* M! l6 ~; n" P$ Z+ ZID Sequence Value-- -------- ----- 2005 2005 10010 10 10 10 1005 10 10005我想要以下结果:7 }% i; [- D6 O/ K+ ?+ g
ID Start Value Count-- ----- ----- ----- 15 15 100 15 200 200 25 100 110 10 10 10 10 10 10 10 10 10 10 15 我试过了) o# ?+ e) s, v. z. s
SELECT ID,MIN([Sequence]) AS Start,Value,COUNT(*) AS [Count] FROM DATA GROUP BY ID,Value ORDER BY ID,Start但这给了8 H$ r/ v9 V ~: W+ v4 Y2 J
ID Start Value Count-- ----- ----- ----- 15 15 100 25 25 200 2100 10 10 10 10 100 100 100 1000 1000 10000 25 25 25 25 25 25 25 25 25 25 25 25 25 它将所有具有相同值的行组合在一起,而不仅仅是连续行。' V4 u. \' E5 N- u
有什么想法吗?从我看到的情况来看,我相信我必须使用它ROW_NUMBER()表在连续行中与自己保持连接,但我不确定如何计数。
2 m9 F C3 m @/ |* W) T" g提前致谢。
2 B! v! Y$ F) C: S t$ [8 n, V , y* T! X: p' H. J
解决方案:
8 E6 t8 o, `, H8 s, F 您可以Sequence - ROW_NUMBER() OVER (ORDER BY ID,Val,Sequence) AS g用来创建一个组:
, `% _4 J% K- p3 x& N* L* zSELECT ID, MIN(Sequence) AS Sequence, Val, COUNT(*) AS cntFROM( SELECT ID, Sequence, Sequence - ROW_NUMBER() OVER (ORDER BY ID,Val,Sequence) AS g, Val FROM yourtable) AS sGROUP BY ID,Val,g |
|