我有两个表:
- 闪耀订单
- LU_CALENDAR
上下文:
- LU_CALENDAR 本质上是一个包含某个范围内所有可能日期的表。它有一个名为 Calendar_date 的天列,其中包含所有日期戳,例如 2000-01-01。
- shine_orders 包含我的订单,其中 dt 列带有日期时间戳,例如“2011-06-15 10:54:09”。
我试图返回一个范围内所有月份的值,即使对于 Shine_orders 中的特定 app_id 来说,某些月份没有行。后者是我正在努力解决的问题。我无法让它返回结果为 0 的数据。
到目前为止的 SQL 语句:
SELECT DATE_FORMAT(dt, '%b %y') as dtstr, COUNT(*)
FROM shine_orders
LEFT JOIN LU_CALENDAR
ON Date(shine_orders.dt) = LU_CALENDAR.Calendar_Date
WHERE shine_orders.type = 'PayPal'
AND shine_orders.app_id = '5'
AND DATE_ADD(LU_CALENDAR.Calendar_Date, INTERVAL 2 YEAR) > NOW()
GROUP BY dtstr
ORDER BY DATE_FORMAT(dt, '%y%m') ASC
示例输出:
这里有人知道我做错了什么吗?
最佳答案
首先,您的示例输出中似乎包含所有月份。但我了解您的问题是,由于示例输出为零,因此跳过了一些月份。
我认为在这种情况下,右连接比左连接更合适,这应该意味着日历日期字段中的每一行都会显示。另外,由于您正确连接到表 LU_CALENDAR,因此您需要确保按 LU_CALENDAR 中的某些内容进行分组;所以对于你的第一行尝试:
SELECT DATE_FORMAT(Calendar_Date, '%b %y') as dtstr, COUNT(*)
关于MySQL 左连接结构不返回订单数为 0 的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36631022/