我正在尝试在 HackerRank 上解决这个问题。在这个问题中,我必须对连续的日期进行分组。当两个日期之间的差为 1 时,两个日期是连续的,并且在此问题陈述中,开始日期和结束日期始终是连续的。
我的方法是将连续的日期分组。为了识别连续日期,我使用了一个变量@rn
。当current start
日期等于前一个日期时end date
,我将拥有相同的日期rn
,否则我将递增rn
。然后我想分组rn
并从每个组中获取相同的min(start date)
和) 。但在实现这个逻辑之前,我遇到了一个问题,即使条件位于 MySQL 的子句内部,变量也会递增。max(end date
rn
@rn
when
false
case
set @rn = 0;
with tasks as (
select distinct Start_Date, End_Date
from Projects
order by Start_Date
)
select
Start_Date, End_Date,
case
when lag(End_Date, 1) over(Order by Start_Date) != Start_Date then @rn:=@rn+1
else @rn
end as cnt
from tasks
在上面的查询中,@rn := @rn+1
即使when
条件为 ,也会执行false
。
我遇到了这个问题,试图解决HackeRank的问题。
如果有人能解释为什么@run := @rn+1
即使条件成立也会被执行,false
那就太好了。
以下是上述查询针对指定问题生成的输出:
我得到的输出:
2015-10-01 2015-10-02 0
2015-10-02 2015-10-03 1
2015-10-03 2015-10-04 2
2015-10-04 2015-10-05 3
2015-10-11 2015-10-12 24
2015-10-12 2015-10-13 5
2015-10-15 2015-10-16 24
2015-10-17 2015-10-18 24
2015-10-19 2015-10-20 24
2015-10-21 2015-10-22 24
2015-10-25 2015-10-26 24
...
我期待的输出
2015-10-01 2015-10-02 1
2015-10-02 2015-10-03 1
2015-10-03 2015-10-04 1
2015-10-04 2015-10-05 1
2015-10-11 2015-10-12 2
2015-10-12 2015-10-13 2
2015-10-15 2015-10-16 3
2015-10-17 2015-10-18 4
2015-10-19 2015-10-20 5
2015-10-21 2015-10-22 6
2015-10-25 2015-10-26 7
...