gpt4 book ai didi

mysql - 如何对重复值进行分组以找到系列的开始和结束?

转载 作者:行者123 更新时间:2023-11-29 03:46:41 26 4
gpt4 key购买 nike

我有一个包含以下数据的表格。

serial   date     flag
1 1 aug 1
2 2 aug 1
3 3 aug 0
4 4 aug 0
5 5 aug 1
6 6 aug 1
7 7 aug 1

我需要的是这个结果集:

from     to       flag
1-aug 2-aug 1
3-Aug 4-Aug 0
5-Aug 7-Aug 1

当我对标志进行分组时,所有 1 值都会组合在一起。有什么建议吗?

最佳答案

一个老问题,我知道,但这可能仍然对某人有帮助......

为了解决这个问题,我假设日期是连续的。然后我加入了数据,首先是“昨天”的数据,然后是“明天”的数据,并获取标志值已更改的那些行 - 这标志着给定系列的开始和结束日期。为了匹配开始日期和结束日期,我订购了每个系列,分配了一个柜台并加入了这个柜台。

代码如下:

SET @cnt1 := 0;
SET @cnt2 := 0;

select firstdate, lastdate, startDates.flag from
(
select @cnt2 := @cnt2 + 1 as i, table1.date as firstdate, table1.flag from table1
left join (
select DATE_ADD(date, INTERVAL 1 DAY) as dateplus1, date, flag from table1
) plus1 on table1.date = plus1.dateplus1
where table1.flag <> IFNull(plus1.flag,-1)
order by table1.date
) startDates
inner join
(
select @cnt1 := @cnt1 + 1 as i, table1.date as lastdate, table1.flag from table1
left join (
select DATE_ADD(date, INTERVAL -1 DAY) as dateminus1, date, flag from table1
) minus1 on table1.date = minus1.dateminus1
where table1.flag <> IFNull(minus1.flag,-1)
order by table1.date
) endDates on startDates.i = endDates.i
;

sql fiddle 在这里:http://sqlfiddle.com/#!2/25594/1/2

关于mysql - 如何对重复值进行分组以找到系列的开始和结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3421419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com