回答

收藏

SQL Server GROUP COUNT个仅连续行

技术问答 技术问答 244 人阅读 | 0 人回复 | 2023-09-14

我在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
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则