Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql返回所有行,无论数据是否存在_Mysql_Rdbms - Fatal编程技术网

mysql返回所有行,无论数据是否存在

mysql返回所有行,无论数据是否存在,mysql,rdbms,Mysql,Rdbms,这是表的一部分,我从中检索过去3个月(包括本月)的数据 +-------------+-----------------------+ | Wo_id | updated_at | +-------------+-----------------------+ | 1 | 2018-12-05 10:38:06 | | 2 | 2018-12-02 15:21:17 | | 3 | 2018-

这是表的一部分,我从中检索过去3个月(包括本月)的数据

+-------------+-----------------------+
| Wo_id       | updated_at            | 
+-------------+-----------------------+
|           1 | 2018-12-05 10:38:06   |
|           2 | 2018-12-02 15:21:17   |
|           3 | 2018-12-01 22:18:53   |
|           4 | 2018-10-25 10:38:06   |
|           5 | 2018-10-18 15:21:17   |
|           6 | 2018-10-16 22:18:53   |
|           7 | 2018-10-19 10:26:19   |
|           8 | 2018-10-27 07:06:52   |
|           9 | 2018-09-25 11:35:09   |
|          10 | 2018-09-18 12:54:27   |
我尝试的问题是

SELECT MONTHNAME(updated_at) month,YEAR(updated_at) year_name, 
MONTH(updated_at) month_no, COUNT(*) work_orders 
FROM work_orders where updated_at >= last_day(now()) + interval 1 day - interval 3 month 
GROUP by MONTH(updated_at),YEAR(updated_at) 
ORDER BY MONTH(updated_at) DESC
我得到的结果是

+-------------+-------------+----------+-------------+
| month       | year_name   | month_no | work_orders |
+-------------+-------------+----------+-------------+
| December    |      2018   | 12       |      3      |
| October     |      2018   | 10       |      5      |
| September   |      2018   | 9        |      2      |
正如您所看到的,查询忽略了十一月,因为它的数据不在表中。包括
9月
以完成错误的3个月周期。我想要这样的输出

+-------------+-------------+----------+-------------+
| month       | year_name   | month_no | work_orders |
+-------------+-------------+----------+-------------+
| December    |      2018   | 12       |      3      |
| November    |      2018   | 9        |      0      |
| October     |      2018   | 10       |      5      |

有人能指导我修改上述查询吗。谢谢

您需要创建一个过去三个月的表格,然后
将其左键连接到您的工单表格(使用工单月份)以获得所需的结果。过去3个月的表格可以使用
联合生成

SELECT NOW() AS month
UNION
SELECT NOW() - INTERVAL 1 MONTH
UNION
SELECT NOW() - INTERVAL 2 MONTH
产量(截至2018年12月7日):

请注意,可以从日期中减去1个月,就好像天数大于上个月的天数一样,它将向下调整以使日期有效(请参阅)

最后一个查询变成:

SELECT MONTHNAME(m.month) AS month_name, YEAR(m.month) AS year_name, 
       MONTH(m.month) AS month_no, COUNT(wo.Wo_id) work_orders 
FROM (SELECT NOW() AS month
      UNION
      SELECT NOW() - INTERVAL 1 MONTH
      UNION
      SELECT NOW() - INTERVAL 2 MONTH) m
LEFT JOIN work_orders wo ON MONTH(wo.updated_at) = MONTH(m.month) AND
                            YEAR(wo.updated_at)  = YEAR(m.month)
GROUP by m.month, year_name
ORDER BY m.month DESC
请注意,我们不需要
WHERE
子句,因为
month
表中的值将数据限制在我们感兴趣的最后3个月。此外,我们还使用
左联接
,这样即使当月没有工单,我们也可以得到每个月的结果

输出:

month_name  year_name   month_no    work_orders
December    2018        12          3
November    2018        11          0
October     2018        10          5

您需要创建一个过去三个月的表格,然后
将其左键连接到工单表格(使用工单月份)以获得所需的结果。过去3个月的表格可以使用
联合生成

SELECT NOW() AS month
UNION
SELECT NOW() - INTERVAL 1 MONTH
UNION
SELECT NOW() - INTERVAL 2 MONTH
产量(截至2018年12月7日):

请注意,可以从日期中减去1个月,就好像天数大于上个月的天数一样,它将向下调整以使日期有效(请参阅)

最后一个查询变成:

SELECT MONTHNAME(m.month) AS month_name, YEAR(m.month) AS year_name, 
       MONTH(m.month) AS month_no, COUNT(wo.Wo_id) work_orders 
FROM (SELECT NOW() AS month
      UNION
      SELECT NOW() - INTERVAL 1 MONTH
      UNION
      SELECT NOW() - INTERVAL 2 MONTH) m
LEFT JOIN work_orders wo ON MONTH(wo.updated_at) = MONTH(m.month) AND
                            YEAR(wo.updated_at)  = YEAR(m.month)
GROUP by m.month, year_name
ORDER BY m.month DESC
请注意,我们不需要
WHERE
子句,因为
month
表中的值将数据限制在我们感兴趣的最后3个月。此外,我们还使用
左联接
,这样即使当月没有工单,我们也可以得到每个月的结果

输出:

month_name  year_name   month_no    work_orders
December    2018        12          3
November    2018        11          0
October     2018        10          5

年份名称是一个有趣的概念。无论如何,考虑在应用程序代码中处理数据显示的问题,例如,AythYNED是一个有趣的概念。无论如何,考虑在应用程序代码中处理数据显示的问题,对我的问题进行完美的回答。谢谢你的提问。如果我需要过去6或9个月的数据怎么办。从性能角度来看,编写多个
UNION SELECT NOW()。如果你想在几周或几天内完成这项工作,那么在数据库中构建一个日历表并加入它可能更有意义。这是我问题的完美答案。谢谢你的提问。如果我需要过去6或9个月的数据怎么办。从性能角度来看,编写多个
UNION SELECT NOW()。如果您想在几周或几天内完成这项工作,那么在数据库中构建一个日历表并将其加入到
中可能更有意义。