调整查询 - 查找特定日期范围内的重复项

时间:2017-12-14 15:47:00

标签: sql vertica

我发布了一个与此类似的问题,并得到了答案,但答案是不可配置的 - 我的错,我应该更清楚,所以我会再试一次。

我有一个表,其中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

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