add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table some_table(
date_field date,
person char(10)
)
;
insert into some_table values ('2021-11-01','Ivanov');
insert into some_table values ('2021-11-01','Ivanov');
insert into some_table values ('2021-11-11','Ivanov');
insert into some_table values ('2021-11-01','Petrov');
insert into some_table values ('2021-11-01','Petrov');
insert into some_table values ('2021-11-11','Sidorov');
insert into some_table values ('2021-11-11','Sidorov');
insert into some_table values ('2021-11-15','Ivanov');
insert into some_table values ('2021-11-05','Sidorov');
select * from some_table;
date_field person
2021-11-01 Ivanov
2021-11-01 Ivanov
2021-11-11 Ivanov
2021-11-01 Petrov
2021-11-01 Petrov
2021-11-11 Sidorov
2021-11-11 Sidorov
2021-11-15 Ivanov
2021-11-05 Sidorov
select cal.cal_date, count(person), person
from some_table st
right join (
-- генерируем календарь - набор дат
select *
from (
select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) cal_date
from
(select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4
) v
where cal_date between '2021-11-01' and '2021-11-30'
) cal on cal.cal_date = st.date_field
group by cal.cal_date, person
;
cal_date count(person) person
2021-11-01 2 Ivanov
2021-11-01 2 Petrov
2021-11-02 0 null
2021-11-03 0 null
2021-11-04 0 null
2021-11-05 1 Sidorov
2021-11-06 0 null
2021-11-07 0 null
2021-11-08 0 null
2021-11-09 0 null
2021-11-10 0 null
2021-11-11 1 Ivanov
2021-11-11 2 Sidorov
2021-11-12 0 null
2021-11-13 0 null
2021-11-14 0 null
2021-11-15 1 Ivanov
2021-11-16 0 null
2021-11-17 0 null
2021-11-18 0 null
2021-11-19 0 null
2021-11-20 0 null
2021-11-21 0 null
2021-11-22 0 null
2021-11-23 0 null
2021-11-24 0 null
2021-11-25 0 null
2021-11-26 0 null
2021-11-27 0 null
2021-11-28 0 null
2021-11-29 0 null
2021-11-30 0 null
SELECT '2021-11-01' + INTERVAL seq DAY FROM seq_0_to_29;
'2021-11-01' + INTERVAL seq DAY
2021-11-01
2021-11-02
2021-11-03
2021-11-04
2021-11-05
2021-11-06
2021-11-07
2021-11-08
2021-11-09
2021-11-10
2021-11-11
2021-11-12
2021-11-13
2021-11-14
2021-11-15
2021-11-16
2021-11-17
2021-11-18
2021-11-19
2021-11-20
2021-11-21
2021-11-22
2021-11-23
2021-11-24
2021-11-25
2021-11-26
2021-11-27
2021-11-28
2021-11-29
2021-11-30
select cal.cal_date, count(person), person
from some_table st
right join (
-- генерируем календарь - набор дат
SELECT '2021-11-01' + INTERVAL seq DAY as cal_date FROM seq_0_to_29
) cal on cal.cal_date = st.date_field
group by cal.cal_date, person
;
cal_date count(person) person
2021-11-01 2 Ivanov
2021-11-01 2 Petrov
2021-11-02 0 null
2021-11-03 0 null
2021-11-04 0 null
2021-11-05 1 Sidorov
2021-11-06 0 null
2021-11-07 0 null
2021-11-08 0 null
2021-11-09 0 null
2021-11-10 0 null
2021-11-11 1 Ivanov
2021-11-11 2 Sidorov
2021-11-12 0 null
2021-11-13 0 null
2021-11-14 0 null
2021-11-15 1 Ivanov
2021-11-16 0 null
2021-11-17 0 null
2021-11-18 0 null
2021-11-19 0 null
2021-11-20 0 null
2021-11-21 0 null
2021-11-22 0 null
2021-11-23 0 null
2021-11-24 0 null
2021-11-25 0 null
2021-11-26 0 null
2021-11-27 0 null
2021-11-28 0 null
2021-11-29 0 null
2021-11-30 0 null