2017-08-16 54 views
0

即时计划要做的事情是,它将从两个表(tblshoes,tblpants)的上一个月获取所有记录并计算发生了多少次订单,因为这将是一个谷歌的图线图我试图从7月30日获得的所有数据上使用1计算所有记录,包括没有值的行和两个表格

SELECT COUNT(*) AS shoeorder, EXTRACT(DAY FROM tlDate) as pdate 
FROM tblshoes 
WHERE tlDate >= CURRENT_DATE - INTERVAL 1 MONTH 
GROUP BY EXTRACT(DAY FROM tlDate) 

这里是我的表是这样的:

tblshoes 

sname       tlDate 
Name Here      2017-07-15 
Name Again      2017-07-14 
Name again and again    2017-07-13 
Name im tired     2017-07-15 
Name of a patient    2017-07-10 
..... 

tblpants 

    pname       tlDate 
    Name Here      2017-07-15 
    Name Again      2017-07-14 
    Name again and again    2017-07-13 
    Name im tired     2017-07-15 
    Name of a patient    2017-07-10 

结果:

shoeorder      pdate 
2       15 
1       14 
1       13 
1       10 

我想要什么:

shoeorder   pdate   pantorder 
0     30     0 
0     29     0 
0     28     0 
0     27     0 
0     26     0 
0     25     0 
0     24     0 
0     23     0 
0     22     0 
0     21     0 
0     20     0 
0     19     0 
0     18     0 
0     17     0 
0     16     0 
2     15     2 
1     14     1 
1     13     1 
0     12     0 
0     11     0 
1     10     1 
0     9     0 
0     8     0 
0     7     0 
0     6     0 
0     5     0 
0     4     0 
0     3     0 
0     2     0 
0     1     0 
+0

你有两个表tblpatient和tblpants,但你从tblshoes选择... – jarlh

+0

编辑它,只是一些错字:d – Valkyrja

+0

编写商店程序并传递开始和结束日期。选择一天一天,然后插入#Temp表格并选择#Temp –

回答

0

您需要使用全外连接...

select 
    coalesce(a.shoeorder, 0) as shoeorder 
    ,coalesce(a.pdate, b.pdate) as pdate 
    ,coalesce(b.pantorder, 0) as pantorder 
from (
    SELECT COUNT(*) AS shoeorder, EXTRACT(DAY FROM tlDate) as pdate 
    FROM tblshoes 
    WHERE tlDate >= CURRENT_DATE - INTERVAL 1 MONTH 
    GROUP BY EXTRACT(DAY FROM tlDate) 
) a 

left join (
    SELECT COUNT(*) AS pantorder, EXTRACT(DAY FROM tlDate) as pdate 
    FROM tblpants 
    WHERE tlDate >= CURRENT_DATE - INTERVAL 1 MONTH 
    GROUP BY EXTRACT(DAY FROM tlDate) 
) b 
on a.pdate = b.pdate 

union 

select 
    coalesce(a.shoeorder, 0) as shoeorder 
    ,coalesce(a.pdate, b.pdate) as pdate 
    ,coalesce(b.pantorder, 0) as pantorder 
from (
    SELECT COUNT(*) AS shoeorder, EXTRACT(DAY FROM tlDate) as pdate 
    FROM tblshoes 
    WHERE tlDate >= CURRENT_DATE - INTERVAL 1 MONTH 
    GROUP BY EXTRACT(DAY FROM tlDate) 
) a 

right join (
    SELECT COUNT(*) AS pantorder, EXTRACT(DAY FROM tlDate) as pdate 
    FROM tblpants 
    WHERE tlDate >= CURRENT_DATE - INTERVAL 1 MONTH 
    GROUP BY EXTRACT(DAY FROM tlDate) 
) b 
on a.pdate = b.pdate 
+0

我收到这个错误'#1064 - 你的SQL语法错误; (*)AS pantorder,EXTRACT(DAY FROM tlDate)as'p'at line 12' – Valkyrja

+0

MySQL不支持使用正确的语法对应于您的MariaDB服务器版本的手册( ) FULL OUTER JOIN。 – jarlh

+0

对不起,我主要用SQL Server和Oracle工作,我不知道MySQL有这个限制。 –

0
SELECT COUNT(*) AS shoeorder, EXTRACT(DAY FROM tlDate) as pdate 
FROM (select tlDate from tblshoes 
     union all 
     select tlDate from tblpants) sub 
WHERE tlDate >= CURRENT_DATE - INTERVAL 1 MONTH 
GROUP BY EXTRACT(DAY FROM tlDate) 

猜你应该联合两个表,然后将结果查询

更新应用群组:然后,你需要填写的所有日期的表(供每天)。使用表格并左键连接查询。

SELECT COUNT(*) AS shoeorder, EXTRACT(DAY FROM adt.tlDate) as pdate 
FROM all_days_table adt 
     LEFT JOIN (select tlDate from tblshoes 
       union all 
       select tlDate from tblpants) sub ON adt.tlDate = sub.tlDate 
WHERE tlDate >= CURRENT_DATE - INTERVAL 1 MONTH 
GROUP BY EXTRACT(DAY FROM adt.tlDate) 
+0

这不会选择与shoeorder = 0的值 – Valkyrja

+0

答案更新 – StanislavL

+0

all_days_table的表结构是什么? tlDate = date?这是什么意思?所有日期已满(每天)。喜欢2017-06-30? – Valkyrja

相关问题