显示间隔超过 5 天的记录

Displaying records that have more than 5 days inbetween them

我有 2 张桌子,

tblCustomer

CustomerID(PK), FirstName, Surname)

tblPurchases

PurchaseID(PK), PurchaseDate, Qty, CustomerID(FK).

我想按以下方式显示自上次购买后五 (5) 天或更长时间购买产品的所有客户。

FirstName      diff in days since last purchase
Alex           7

谢谢!

尝试使用以下查询。

SELECT FirstName, DATEDIFF(DAY, t.PurchaseDate, getdate()) as 'diff in days since last purchase'
FROM tblCustomer c
 JOIN (SELECT CustomerID, MAX(PurchaseDate)PurchaseDate
       FROM tblPurchases
       GROUP BY CustomerID )t ON c.CustomerID=t.CustomerID
WHERE DATEDIFF(DAY, PurchaseDate, getdate())>5
SELECT FirstName, 
DATEDIFF(DAY, t.PurchaseDate, getdate())  'diff in days since last purchase'
FROM tblCustomer c
 JOIN (SELECT CustomerID, MAX(PurchaseDate)PurchaseDate
       FROM tblPurchases
       GROUP BY CustomerID )t ON c.CustomerID=t.CustomerID
WHERE DATEDIFF(DAY, t.PurchaseDate, getdate())>5

通过连接两个表,根据每个 CustomerId 的最后购买日期给出行号。

然后找出current date and PurchaseDate by using DATEDIFF之间的天数差。
并且在WHERE子句中给出天数差。

查询

;WITH CTE AS(
    SELECT [rn] = ROW_NUMBER() OVER(
        PARTITION BY t.[CustomerID]
        ORDER BY t.[PurchaseDate] DESC
    ), t.[CustomerID], t.[FirstName], t.[PurchaseDate]
    FROM (
       SELECT t1.[CustomerID], t1.[FirstName], t2.[PurchaseDate]
       FROM [tblCustomer] t1
       JOIN [tblPurchases] t2
       ON t1.[CustomerID] = t2.[CustomerID]
    )t
)
SELECT [FirstName], 
DATEDIFF(DAY, [PurchaseDate], GETDATE()) AS [diff in days since last purchase]
FROM CTE
WHERE [rn] = 1
AND DATEDIFF(DAY, [PurchaseDate], GETDATE()) > 5;
;WITH T AS
(
    SELECT 
        *,
        DATEDIFF(DAY, [PurchaseDate], GETDATE()) AS DiffInDays
    FROM @tblPurchases
    WHERE DATEDIFF(DAY, [PurchaseDate], GETDATE()) > 5
)   
SELECT
    C.FirstName,    
    MAX(DiffInDays) AS DiffInDays
FROM T
LEFT JOIN @tblCustomer C ON T.CustomerId=C.CustomerId
GROUP BY C.FirstName