您的老板喜欢您在第一个项目中编写的数据透视查询。他向会计师展示,她说她想查看类似的查询,但要显示过去 30、60 和 90 天的销售额。
MySQL 有一个函数可以用来比较两个日期 - DATEDIFF: SELECT DATEDIFF(now(), DateOfPurchase) FROM Purchases MySQL 从“now”中减去 DateOfPurchase 并返回一个整数,表示这两个日期之间的天数。
您可以使用此功能编写会计师请求的数据透视查询。结果可能类似于以下内容:
Album D30 D60 D90
OK Computer 2 5 3
Sea Change 8 6 2
请注意,每个时间段都有单独的数据。D60 数据应该是 31 到 60 天前的购买,而不是过去 60 天内购买的所有商品。同样,D90 数据应该是 61 到 90 天前的购买,而不是过去 90 天内购买的所有商品。
不要创建单独的表或视图。
将您的查询保存为 dba1lesson10project2.sql,然后提交项目。
我已将采购数据输入到我的采购表中,这些数据相隔 30 天、60 天和 90 天。
我的桌子看起来像
Customer ID DateOfPurchase SongID
1 2007-03-31 3
3 2007-06-30 4
4 2007-09-30 4
5 2007-12-31 5
2 2013-08-21 2
4 2013-07-22 5
5 2013-06-22 1
所以,我每 30 天只会有 1 次购买来展示。我之前的项目是显示每季度的采购量,这就是 2007 年数据存在的原因。我一直在和我的导师讨论这个问题,他说我的代码与我上一个项目的代码相似。
我试过了
SELECT DATEDIFF(now(), DateOfPurchase),
SUM(CASE WHEN DateOfPurchase <= 30 THEN 1 ELSE 0 END) AS 'D30',
SUM(CASE WHEN DateOfPurchase >= 31 AND DateOfPurchase = 60 THEN 1 ELSE 0 END) AS 'D60',
SUM(CASE WHEN DateOfPurchase >= 61 AND DateOfPurchase = 90 THEN 1 ELSE 0 END) AS 'D90'
FROM Purchases;
返回:
DATEDIFF(now(), DateOfPurchase D30 D60 D90
2365 0 0 0
我已经尝试了该代码的几个不同变体,它们几乎返回相同的结果。除了第一列中的数字相同。
我上一个项目的代码如下,如果有帮助的话。
SELECT A.Title,
SUM(CASE WHEN QUARTER(DateOfPurchase) = 1 THEN 1 ELSE 0 END) AS 'Q1',
SUM(CASE WHEN QUARTER(DateOfPurchase) = 2 THEN 1 ELSE 0 END) AS 'Q2',
SUM(CASE WHEN QUARTER(DateOfPurchase) = 3 THEN 1 ELSE 0 END) AS 'Q3',
SUM(CASE WHEN QUARTER(DateOfPurchase) = 4 THEN 1 ELSE 0 END) AS 'Q4'
FROM Albums AS A
INNER JOIN Songs AS S
ON A.AlbumID = S.AlbumID
INNER JOIN Purchases as P
ON S.SongID = P.SongID
GROUP BY A.Title;
我也知道我也必须为这个项目做表连接。在我这样做之前,我只是想获得 D30 D60 和 D90 的正确输出。