【发布时间】:2015-11-20 01:52:25
【问题描述】:
SELECT det.partNum,
SUM(det.quantity) AS Demand1,
COUNT(det.partNum) AS Call1
FROM details det
JOIN invoice inv ON det.invoice_id = inv.id
WHERE inv.invoice_date
BETWEEN '2015-11-01 00:00:00'
AND '2015-11-31 23:59:59'
GROUP BY partNum
上面的 sql 返回当月的所有零件编号、售出的总数(需求)和零件参与的交易总数(调用)。
我们的供应商想要的是每个零件的这些信息,而且还针对过去 24 个月的每个月进行分组。他们请求的 csv 如下所示(如果只查看过去 3 个月):
Part# | Demand1 | Demand2 | Demand3 | Call1 | Call2 | Call3
123 | 0 | 2 | 0 | 0 | 1 | 0
345 | 6 | 3 | 4 | 1 | 2 | 3
Part# 123: 0 transactions this month (Call1) 0 quantity sold (Demand1)
1 transaction last month (Call2) 2 quantity sold (Demand2).
0 transactions two months ago (Call3) 0 quantity sold (Demand3).
Part# 345: 1 transaction this month (Call1) for qty sold of 6 (Demand1)
2 transactions last month (Call2) for qty sold of 3 (Demand2)
3 transactions two months ago (Call3) for qty sold of 4 (Demand3)
意识到他们希望将其延长至过去 24 个月。 Demand1/Call1 始终是当前月份。
我使用 WHERE/BETWEEN 语句来显示日期的来源,并演示如何获得当月部件的准确报告。
我不知道该怎么做就是满足 24 个月的需求和需求。这是供应商希望数据采用的格式。这不是我的选择。任何帮助使其按预期工作将不胜感激。
谢谢
编辑
我删除了 sql-server 标记。对于那个很抱歉。这只是 MySQL。
另外,我正在从下面添加我的回复...
查看 DATEDIFF、TIMESTAMPDIFF 甚至 PERIOD_DIFF。但实际上似乎没有人返回我需要的东西。需要发生的是第一个需求列应该搜索当前月份的第 1 天(包括)到下个月的第 1 天(不包括)。下一个需求列应搜索当前月份 - 一个月第 1 天(含)到下个月 - 一个月第 1 天(不含)。并且每个后续列都应该搜索相同的参数,每列减去一个额外的月份。我不认为仅仅使用 DATEDIFF 就可以精确地完成。
我希望这是有道理的。
再次感谢您的帮助。
【问题讨论】:
-
你能简单地按年+月分组吗?
-
我建议按零件编号、年份和月份进行分组,然后以供应商要求的形式获取数据。
-
我需要按零件编号收集的所有信息。每个部件号将有 48 列。我不知道如何通过按年+月分组来实现这一点。
-
垫子,我会搜索枢轴,但是当我这样做的时候,你能提供一些例子吗?
标签: mysql