我发布了一个与此类似的问题,并得到了答案,但答案是不可配置的 - 我的错,我应该更清楚,所以我会再试一次。
我有一个表,其中TABLENAME具有以下信息 - OrderDate,OrderNumber,CustomerID,ProductSKU,ProductName存在。此表包含发票行。因此,订单将为订单中的每个项目提供数据行。
我想知道,在特定日期之后,哪个客户订购了相同的商品,不止一次,订单在该客户的同一产品的任何其他订单的90之内。同一订单号中的相同产品不计算在内。问题是我想要“不止一次”可配置,所以如果我需要看到3个或更多,或者4个或更多我可以调整并且我想看到计数。这是我到目前为止的查询,我认为它给了我项目和计数 - 但不是90天的事情:
编辑:我不认为前一版本给了我正确的计数
SELECT customerid, productsku, productname, count(distinct ordernumber) FROM tablename
WHERE orderdate >'2017-11-01'
GROUP BY customerid, productsku, productname
HAVING COUNT(distinct ordernumber) > 2
答案 0 :(得分:1)
尝试这样做。它会回到90天
declare @date date = '2017-11-01'
SELECT customerid, productsku, productname, count(distinct ordernumber) FROM tablename
WHERE orderdate >= dateadd(DD,-90,@date) and orderdate <= @date
GROUP BY customerid, productsku, productname
HAVING COUNT(distinct ordernumber) > 1
答案 1 :(得分:0)
是的,这就是我在第一个查询中所做的。所以这可能是一个非常糟糕的方式,但没有看到任何数据,这是一种艰难。此查询显示也为您提供订单日期。希望它有所帮助
WITH DupsWithin90Days (customerid,productsku,productname,orderdate,num)
as
(
select customerid,productsku,productname,orderdate ,count(*) num from (
SELECT X.customerid, X.productsku, X.productname,X.ORDERDATE,ROW_NUMBER() OVER (partition by x.customerid,x.orderdate order by x.orderdate) rownum
FROM
(
SELECT T1.customerid, T1.productsku, T1.productname,T1.ORDERDATE
FROM TABLENAME1 T1
) X
JOIN
(
SELECT T2.customerid, T2.productsku, T2.productname,T2.ORDERDATE
FROM
TABLENAME1 T2
) Y
ON X.customerid = Y.customerid AND X.orderdate >= dateadd(DD,-90,Y.orderdate)
) dup
where rownum > 1
group by customerid,productsku,productname,orderdate
)
select customerid,productsku,productname,orderdate
from DupsWithin90Days
order by customerid ,orderdate desc