我想找出两个财政年度( 17-17财年和17-18财年)的产品购买情况。
要解决这个问题:
所有者ID: 101 ,第一次购买是在2014年,在2017-18财年进行了3次购买。
所有者ID: 102 ,第一次购买是在2011年,在16-17财年进行了1次购买,在17-18财年进行了1次购买。
所有者ID: 103 ,第一次购买是在2017年,但是不应被认为是他的新客户,在17-18财年他只购买了1次。 (即,如果有新客户,则不考虑首次购买)
所有者ID: 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
但是它会引发错误:
第15级状态1行5的消息102
')'附近的语法不正确。
答案 0 :(得分:1)
子查询需要具有别名-尝试以下操作:
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
答案 1 :(得分:1)
我正在使用IIF来分隔两个会计年度,并使用子查询来过滤仅购买一次的会计年度
ApiInterface apiInterface = ApiClinet.GetClinet().create(ApiInterface.class);
Call<String> call = apiInterface.GetHome_call("x","y");
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});