我想改变这样的事情:
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结束。然后我按顺序重复这个过程。
简而言之,我试图在每个索引中对同一个Record的顺序块执行计数分组。换句话说,我 NOT 正在寻找这个:
select index, count(*) as countseq, record, max(time) as lasttime
from Table1
group by index,record
它将所有内容组合在同一条记录中,而我希望它们可以通过序列分隔来分隔。
有没有办法在SQL中执行此操作?
答案 0 :(得分:0)
如果没有单个主键,很难解决您的问题,所以我假设您有一个主键列增加每一行(primkey)。如果前一个primkey行具有与当前一个相同的索引和记录,则此请求将返回具有值为1的'diff'列的相同表,否则为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表达式为false时都会增加,你会得到如下结果:
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
哪个会解决您的问题,您只需将'diff'添加到group by子句中。 不幸的是我无法在sqlite上测试它,但你应该能够使用变量like this。 这可能是一个肮脏的解决方法,但我找不到更好的方法,希望它有所帮助。