查询给定日期 X 个月的销售总额

Posted

技术标签:

【中文标题】查询给定日期 X 个月的销售总额【英文标题】:Query to sum sales totals for X number of months given dates 【发布时间】:2015-07-20 03:11:56 【问题描述】:

我想查询每个产品 ID 在一组月份(即 5 月 - 8 月)的总销售额

我想要:

+------------+-------------------------+-------+--------------+-----------------+
| PRODUCT_ID |          ITEM           | PRICE | GROSS_MARGIN | Sum Of QUANTITY |
+------------+-------------------------+-------+--------------+-----------------+
| 100-10     | ALVE laptop table       |    89 | 56%          |           23323 |
| 100-15     | FREDRIK desk            |   129 | 44%          |            9614 |
| 100-20     | GALANT conference table |   369 | 32%          |           10272 |
+------------+-------------------------+-------+--------------+-----------------+

但我无法设置查询来执行此操作,因为我是新手(真的是我第一次玩弄它)。

这是我当前查询的结果:

+------------+--------------------------+---------+--------------+--------------------+----------+
| PRODUCT_ID |           ITEM           |  PRICE  | GROSS_MARGIN | TRANSDATE By Month | QUANTITY |
+------------+--------------------------+---------+--------------+--------------------+----------+
| 100-10     | ALVE laptop table        | $89.00  | 56.00%       | August 2011        |     9679 |
| 100-10     | ALVE laptop table        | $89.00  | 56.00%       | July 2011          |     9436 |
| 100-10     | ALVE laptop table        | $89.00  | 56.00%       | June 2011          |     3222 |
| 100-10     | ALVE laptop table        | $89.00  | 56.00%       | May 2011           |      986 |
| 100-15     | FREDRIK desk             | $129.00 | 44.00%       | August 2011        |     3150 |
| 100-15     | FREDRIK desk             | $129.00 | 44.00%       | July 2011          |     2695 |
| 100-15     | FREDRIK desk             | $129.00 | 44.00%       | June 2011          |     3769 |
| 100-20     | GALANT conference table  | $369.00 | 32.00%       | August 2011        |     3814 |
| 100-20     | GALANT conference table  | $369.00 | 32.00%       | July 2011          |     4977 |
| 100-20     | GALANT conference table  | $369.00 | 32.00%       | June 2011          |      225 |
| 100-20     | GALANT conference table  | $369.00 | 32.00%       | May 2011           |     1256 |
+------------+--------------------------+---------+--------------+--------------------+----------+

基本上,我想要一行来总结这 4 个月(5 月到 8 月,包括当月的每一天)该商品的所有销售额。如有必要,请忽略其他列(价格和保证金)。

任何帮助将不胜感激,我需要在星期五之前完成这项工作! 已经玩了好几个小时了,但每次我走近一步时,我似乎都会打破一些东西。 :'(

这是我当前的 SQL 语法/代码(抱歉,不知道正确的术语)。

SELECT DISTINCTROW 
     PRODUCTS.PRODUCT_ID, 
     PRODUCTS.ITEM, 
     PRODUCTS.PRICE, 
     PRODUCTS.GROSS_MARGIN,
     Format$([SALES].[TRANSDATE],'mmmm yyyy') AS [TRANSDATE By Month], 
     Sum(SALES.QUANTITY) AS [Sum Of QUANTITY]
FROM PRODUCTS INNER JOIN 
     SALES ON PRODUCTS.[PRODUCT_ID] = SALES.[PRODUCT_ID]
GROUP BY 
     PRODUCTS.PRODUCT_ID, 
     PRODUCTS.ITEM, 
     PRODUCTS.PRICE, 
     PRODUCTS.GROSS_MARGIN, 
     Format$([SALES].[TRANSDATE],'mmmm yyyy'), Year([SALES].[TRANSDATE])*12+DatePart('m',[SALES].[TRANSDATE])-1;

这实际上显示了所有月份和年份的所有数据(我有所有产品的 2 年数据)。我只想要一年(2011 年 5 月至 8 月)四个月内每个产品 ID 的总销售额。请帮忙!

【问题讨论】:

sqlfiddle.com/#!3/71d47 这是两个表的示例数据。基于这些表,我想要一个查询,该查询可以为每个 ID 带来销售额,并将 2011 年 5 月至 8 月的销售额总计,如上所述。非常感谢任何帮助.. 花了 4 多天时间试图解决这个问题... 需要新鲜的眼睛。 【参考方案1】:

由于这是 Access,SQL Fiddle 只能是一个开始。

您需要正确“引用”日期表达式:

SELECT 
     PRODUCTS.PRODUCT_ID, 
     PRODUCTS.ITEM,      
     Sum(SALES.QUANTITY) AS [Sum Of QUANTITY]
FROM 
     PRODUCTS INNER JOIN 
     SALES ON PRODUCTS.[PRODUCT_ID] = SALES.[PRODUCT_ID]
WHERE 
    [SALES].[TRANSDATE] BETWEEN #2015-05-01# AND #2015-08-31#
GROUP BY 
     PRODUCTS.PRODUCT_ID, 
     PRODUCTS.ITEM

更正 2015-07-23

非常抱歉错过了您的原始数据的日期为 2011 年而不是 2011 年。我特此发布更正后的 SQL 供您测试:

SELECT 
     PRODUCTS.PRODUCT_ID, 
     PRODUCTS.ITEM,      
     Sum(SALES.QUANTITY) AS [Sum Of QUANTITY]
FROM 
     PRODUCTS INNER JOIN 
     SALES ON PRODUCTS.[PRODUCT_ID] = SALES.[PRODUCT_ID]
WHERE 
    [SALES].[TRANSDATE] BETWEEN #2011-05-01# AND #2011-08-31#
GROUP BY 
     PRODUCTS.PRODUCT_ID, 
     PRODUCTS.ITEM

这将从您的 Access 数据库中生成一个输出。但是,与 SQL Fiddler 一起使用时会有所不同:

SELECT 
     PRODUCTS.PRODUCT_ID, 
     PRODUCTS.ITEM,      
     Sum(SALES.QUANTITY) AS [Sum Of QUANTITY]
FROM 
     PRODUCTS INNER JOIN 
     SALES ON PRODUCTS.[PRODUCT_ID] = SALES.[PRODUCT_ID]
WHERE 
    [SALES].[TRANSDATE] BETWEEN '2011-05-01' AND '2011-08-31'
GROUP BY 
     PRODUCTS.PRODUCT_ID, 
     PRODUCTS.ITEM

很抱歉给您带来不便。

【讨论】:

我已经尝试过了,它没有返回没有结果的预期列。我不确定查询在哪里被窃听,但这是我认为正确的,它什么也没返回。我将在今天晚些时候将两张表的部分内容上传到小提琴中,也许这会帮助某人找出问题所在。 sqlfiddle.com/#!3/71d47 这是两个表的示例数据。基于这些表,我想要一个查询,该查询可以为每个 ID 带来销售额,并将 2011 年 5 月至 8 月的销售额总计,如上所述。非常感谢任何帮助.. 花了超过 4 天的时间试图解决这个问题......需要新鲜的眼睛。 —— 这样的查询不会返回任何记录...因为您只有 2010-01 和 2011-03 之间的数据。 sqlfiddle.com/#!3/db52cc 更新为包括我提到的月份(2011 年 5 月 - 8 月)。

以上是关于查询给定日期 X 个月的销售总额的主要内容,如果未能解决你的问题,请参考以下文章

使用Scala从给定月份获取前12个月的月底日期

如何为过去 3 个月的每个日期运行查询

如何从当前日期 PHP 获取最近 7 周、7 个月的日期范围?

给定一个 NSDate,找到前第四个月的最后一天

SQL 使用两个提前 16 个月的日期字段返回记录

用于显示距当前日期超过 8 个月的 WordPress 自定义帖子类型的自定义查询