sql >> Database teknologi >  >> RDS >> Mysql

MySQL Udfyld manglende datoer mellem to datoer for en given status

plan

opsætning

drop table if exists calendar_t;
CREATE TABLE calendar_t (
  id integer primary key auto_increment not null,
  `date` date not null,
  day varchar(9) not null,
  month varchar(13) not null,
  `year` integer not null
);

drop view if exists digits_v;
create view digits_v
as
select 0 as n
union all
select 1
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7
union all
select 8
union all
select 9
;

insert into calendar_t
( `date`, day, month, `year` )
select 
date_add('2015-01-01', interval 100*a2.n + 10*a1.n + a0.n day) as `date`,
dayname(date_add('2015-01-01', interval 100*a2.n + 10*a1.n + a0.n day)) as day,
monthname(date_add('2015-01-01', interval 100*a2.n + 10*a1.n + a0.n day)) as month,
year(date_add('2015-01-01', interval 100*a2.n + 10*a1.n + a0.n day)) as `year`
from
digits_v a2
cross join digits_v a1
cross join digits_v a0
order by date_add('2015-01-01', interval 100*a2.n + 10*a1.n + a0.n day)
;

drop table if exists example;
create table example
(
  `date` date not null,
  status varchar(23) not null
);

insert into example
( `date`, status )
values
( '2015-06-01',  'Start'   ),
( '2015-06-03',  'Stage 2' ),
( '2015-06-07',  'Stage 3' )
;
 

forespørgsel

select cal_date, mdate, ex2.status
from
(
select cal_date, max(ex_date) as mdate
from
(
select cal.`date` as cal_date, ex.`date` as ex_date
from calendar_t cal
inner join example ex
on ex.`date` <= cal.`date`
) maxs
group by cal_date
) m2
inner join example ex2
on m2.mdate = ex2.`date`
-- pick a reasonable end date for filtering..
where cal_date <= date('2015-06-15')
order by cal_date
;
 

output

+------------------------+------------------------+---------+ | cal_date | mdate | status | +------------------------+------------------------+---------+ | June, 01 2015 00:00:00 | June, 01 2015 00:00:00 | Start | | June, 02 2015 00:00:00 | June, 01 2015 00:00:00 | Start | | June, 03 2015 00:00:00 | June, 03 2015 00:00:00 | Stage 2 | | June, 04 2015 00:00:00 | June, 03 2015 00:00:00 | Stage 2 | | June, 05 2015 00:00:00 | June, 03 2015 00:00:00 | Stage 2 | | June, 06 2015 00:00:00 | June, 03 2015 00:00:00 | Stage 2 | | June, 07 2015 00:00:00 | June, 07 2015 00:00:00 | Stage 3 | | June, 08 2015 00:00:00 | June, 07 2015 00:00:00 | Stage 3 | | June, 09 2015 00:00:00 | June, 07 2015 00:00:00 | Stage 3 | | June, 10 2015 00:00:00 | June, 07 2015 00:00:00 | Stage 3 | | June, 11 2015 00:00:00 | June, 07 2015 00:00:00 | Stage 3 | | June, 12 2015 00:00:00 | June, 07 2015 00:00:00 | Stage 3 | | June, 13 2015 00:00:00 | June, 07 2015 00:00:00 | Stage 3 | | June, 14 2015 00:00:00 | June, 07 2015 00:00:00 | Stage 3 | | June, 15 2015 00:00:00 | June, 07 2015 00:00:00 | Stage 3 | +------------------------+------------------------+---------+

sqlfiddle

reference



  1. SQL DROP TABLE-erklæring og forskellige brugssager

  2. Får Mysql2::Error (SSL-forbindelsesfejl:ASN:dårlig anden signaturbekræftelse) på Heroku-appen med AWS RDS

  3. Administration af høj tilgængelighed i PostgreSQL – Del II:Replikeringsmanager

  4. Hvordan designer man bedst en REST API med flere filtre?