SELECT b.`year`, b.flag, (SELECT COUNT(1) FROM temp_year c WHERE c.`year` <= b.`year` AND c.`year` > (SELECT IFNULL(MAX((d.`year`)), 0) FROM temp_year d WHERE c.flag != d.flag AND d.`year` <= b.`year`)) num FROM temp_year b
4、查询结果:
select a,b ,ROW_NUMBER() OVER(partition by b,(num-rn) order by num) AS c from ( select a,b,num ,ROW_NUMBER() OVER(partition by b order by num) AS rn from ( select a,b,ROW_NUMBER() over( order by a) as num from ( select 2010 as a,1 as b from dual union all select 2011 as a,1 as b from dual union all select 2013 as a,1 as b from dual union all select 2014 as a,0 as b from dual union all select 2016 as a,0 as b from dual union all select 2018 as a,1 as b from dual union all select 2019 as a,1 as b from dual union all select 2020 as a,1 as b from dual union all select 2021 as a,0 as b from dual union all select 2022 as a,0 as b from dual ) t0 ) t1 ) t2 order by a
3.3 第95问
问:Kettle SQL 如何实现反向计算某一年某一周的起始日【趣味探讨】?
答:我们以MySQL为例,反向计算某年某一周的周一和周日分别对应日期
SELECT DATE_ADD(DATE_SUB(concat(substr('2022 第02周',1,4),'-01-01'), INTERVAL CASE WHEN DAYOFWEEK(concat(substr('2022 第02周',1,4),'-01-01')) - 1 = 0 THEN 7 ELSE DAYOFWEEK(concat(substr('2022 第02周',1,4),'-01-01')) - 1 END DAY), INTERVAL (CONVERT(substr('2022 第02周',7,2), UNSIGNED INTEGER)-1)*7 + 1 DAY) as first_day_of_week, DATE_ADD(DATE_SUB(concat(substr('2022 第02周',1,4),'-01-01'), INTERVAL CASE WHEN DAYOFWEEK(concat(substr('2022 第02周',1,4),'-01-01')) - 1 = 0 THEN 7 ELSE DAYOFWEEK(concat(substr('2022 第02周',1,4),'-01-01')) - 1 END DAY), INTERVAL (CONVERT(substr('2022 第02周',7,2), UNSIGNED INTEGER)-1)*7 + 7 DAY) as last_day_of_week