![](/img/trans.png)
[英]How to get 0-30 days record, 30-60 and 60 -90 and above 90 in mysql
[英]DATEDIFF showing purchases from the last 30, 60, and 90 days
您的老板喜歡您在第一個項目中編寫的樞軸查詢。 他向會計師展示,她說她希望看到類似的查詢,但是過去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天只有一次購買才能顯示。 我以前的項目是顯示每個季度的購買量,因此才有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的正確輸出。
你想要這樣的東西
SELECT SUM(CASE WHEN DATEDIFF(CURDATE(), DateOfPurchase)
BETWEEN 0 AND 30 THEN 1 ELSE 0 END) D30,
SUM(CASE WHEN DATEDIFF(CURDATE(), DateOfPurchase)
BETWEEN 31 AND 60 THEN 1 ELSE 0 END) D60,
SUM(CASE WHEN DATEDIFF(CURDATE(), DateOfPurchase)
BETWEEN 61 AND 90 THEN 1 ELSE 0 END) D90
FROM Purchase
WHERE DateOfPurchase BETWEEN CURDATE() - INTERVAL 90 DAY AND CURDATE()
注意:由於您僅從當天獲取90天的數據,因此最好使用WHERE
子句過濾掉其他所有內容,並以索引友好的方式進行處理。
樣本輸出:
| D30 | D60 | D90 | |-----|-----|-----| | 1 | 1 | 1 |
這是SQLFiddle演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.