显示间隔超过 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
我有 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