我有两张表 DT 和平均值:
CREATE TABLE averages (
`workdate` DATE NULL,
`emp` VARCHAR(45) NOT NULL,
`Score1` INT NULL,
`Score2` INT NULL);
INSERT INTO averages VALUES
('2021-06-01','Sal','12','1'),
('2021-06-02','Sal','11','1'),
('2021-05-28','Rick','10','1'),
('2021-06-01','Rick','12','1'),
('2021-06-02','Liz','11','1'),
('2021-05-28','Liz','10','1');
CREATE TABLE datestemp AS
SELECT Min(workdate) AS date, emp
FROM averages
GROUP BY emp;
CREATE TABLE DT AS
with recursive cte as (
select emp, date
from datestemp
union all
select emp, date + interval 1 day
from cte
where date <= curdate()
)
select *
from cte
order by emp, date;
我希望平均表具有与 DT 表中类似的日期,即我希望averages.workdate 列具有从最小日期到今天日期的员工(emp)的所有日期。然后,在递归 CTE 函数添加额外日期的地方,Score1 和 Score2 列可以有 0。我希望平均表看起来像这样:
工作日期 | 雇员 | 得分1 | 得分2 |
---|---|---|---|
2021-06-01 | 萨尔 | 12 | 1 |
2021-06-02 | 萨尔 | 11 | 1 |
2021-06-03 | 萨尔 | 0 | 0 |
2021-06-04 | 萨尔 | 0 | 0 |
2021-05-28 | 瑞克 | 10 | 1 |
2021-05-29 | 瑞克 | 0 | 0 |
2021-05-30 | 瑞克 | 0 | 0 |
2021-05-31 | 瑞克 | 0 | 0 |
2021-06-01 | 瑞克 | 12 | 1 |
2021-06-02 | 瑞克 | 0 | 0 |
2021-06-03 | 瑞克 | 0 | 0 |
2021-06-04 | 瑞克 | 0 | 0 |
....等等。
我尝试加入两个表,但无法获得我想要的结果。可能有一种方法可以跳过创建 DT 表并使用平均表中的最少日期,然后在其上使用递归 CTE?我不确定它是否或如何工作,递归 CTE 函数的新功能。关于如何解决这个问题的任何想法?
相同的 db<>fiddle 在这里:https ://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0010c4d5e3a1c2eac9c065b31344f128
先感谢您!