[英]Calculating product purchases in a Financial Year | SQL Server
我想了解 2 個財政年度( FY16-17 和 FY17-18 )的產品購買情況。
去做吧:
OwnerID: 101 ,第一次購買是在2014年,FY17-18有3次購買。
OwnerID: 102 ,第一次購買是在2011年,16-17財年購買1次,17-18財年購買1次。
OwnerID: 103 ,第一次購買是在 2017 年但是不應該被認為是因為他是一個新客戶,在 FY17-18 只購買了一次。 (即新客戶不考慮首次購買)
OwnerID: 104 ,第一次購買是在 2016 年,但在 16-17 財年又購買了 3 次。
代碼:
CREATE TABLE Test
(
OwnerID INT,
ProductID VARCHAR(255),
PurchaseDate DATE
);
INSERT INTO Test (OwnerID, ProductID, PurchaseDate)
VALUES (101, 'P2', '2014-04-03'), (101, 'P9', '2017-08-09'),
(101, 'P11', '2017-10-05'), (101, 'P12', '2018-01-15'),
(102, 'P1', '2011-06-02'), (102, 'P3', '2016-06-03'),
(102, 'P10', '2017-09-01'),
(103, 'P8', '2017-06-23'),
(104, 'P4', '2016-12-17'), (104, 'P5', '2016-12-18'),
(104, 'P6', '2016-12-19'), (104, 'P7', '2016-12-20');
期望的輸出:
FY16-17 FY17-18
-----------------
5 4
我嘗試了以下查詢來獲取不是第一次出現的記錄,並通過獲取財政年度內的計數:
SELECT *
FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY OwnerID ORDER BY PurchaseDate) AS OCCURANCE
FROM Test
GROUP BY OwnerID, PurchaseDate)
WHERE
OCCURANCE <> 1
但是它拋出一個錯誤:
消息 102,級別 15,狀態 1,第 5 行
')' 附近的語法不正確。
子查詢需要有一個別名- 試試這個:
SELECT *
FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY OwnerID ORDER BY PurchaseDate) AS OCCURRENCE
FROM Test
GROUP BY OwnerID, PurchaseDate) subQry
WHERE
subQry.OCCURRENCE <> 1
我正在使用 IIF 來分隔兩個會計年度和子查詢來過濾掉那些只有一次購買的
SELECT SUM(IIF(PurchaseDate >= '2016-04-01' AND PurchaseDate < '2017-04-01',1,0)) AS 'FY16-17',
SUM(IIF(PurchaseDate >= '2017-04-01' AND PurchaseDate < '2018-04-01',1,0)) AS 'FY17-18'
FROM test t1
JOIN (SELECT ownerID, COUNT(*) count
FROM test
GROUP BY ownerID) t2 on t1.ownerID = t2.ownerID
WHERE t2.count > 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.