【问题标题】:MySQL: count appearance of sequencesMySQL:计数序列的出现
【发布时间】:2022-01-17 13:47:05
【问题描述】:

我有一张桌子:

id mode
1 B
2 B
3 A
4 A
5 A
6 A
7 B
8 B
9 C
10 C
11 C
12 B
13 A
14 A
15 A
16 B
17 C
18 B
19 C
20 B
21 B

我想计算以下序列:

“开始”:xA -> xB -> xC

“停止”:xC -> xB ->xA

因此该表的最终结果将是:

START = 2(ID:3-11、13-17)

停止 = 1(ID:9-15)

重点是我只需要计算正确的模式变化,无论模式记录多少次。

有人可以帮忙吗? (tnx!)

【问题讨论】:

  • 折叠(如果mode=LAG(mode) 则删除行)然后使用mode='B' 测试行的LEAD 和LAG。
  • @Akina tnx,我会试试的。
  • 我认为投反对票的原因是你如何用那个“表”提出问题

标签: mysql mariadb


【解决方案1】:

好的,我解决了这个问题:

select 
sum(case when prev= "A" and nxt="C"  then 1 else 0 end) as start,
sum(case when prev= "C" and nxt="A"  then 1 else 0 end) as stop
from (
select id, prev, mode, nxt
    from (
        select 
        id,
        LAG(mode)OVER (
            partition by 1
            order by id
            ) prev,
        mode, 
        LEAD(mode)OVER (
            partition by 1
            order by id
            )  nxt
        from prva
        order by id
    ) sub
    where mode <> nxt and mode="B"
) data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2011-08-04
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多