DECLARE @ComparisonMonth DATE
SET @ComparsionMonth '09-01-2018'
SELECT
Date, Sales, CustomerID
FROM
Database1 t1
WHERE
Date >= CASE
WHEN (SELECT MAX(Date)
FROM Database1 t2
INNER JOIN ON t1.PlayerID = t2.PlayerID) >= DATEADD(month, -4, @ComparisonMonth)
AND (SELECT MAX(Date)
FROM Database1 t2
INNER JOIN ON t1.PlayerID = t2.PlayerID) < DATEADD(month, -1, @ComparsionMonth)
THEN DATEADD(month, -4, @ComparisonMonth)
WHEN (SELECT MAX(Date)
FROM Database1 t2
INNER JOIN ON t1.PlayerID = t2.PlayerID) >= DATEADD(month, -7, @ComparisonMonth)
AND (SELECT MAX(Date)
FROM Database1 t2
INNER JOIN ON t1.PlayerID = t2.PlayerID) < DATEADD(month, -4, @ComparsionMonth)
THEN DATEADD(month, -7, @ComparisonMonth)
END
AND Date < CASE
WHEN (Select MAX(Date) from Database1 t2 INNER JOIN on t1.PlayerID=t2.PlayerID) >= DATEADD(month, -4, @ComparisonMonth)
AND (Select MAX(Date) from Database1 t2 INNER JOIN on t1.PlayerID=t2.PlayerID) < DATEADD(month, -1, @ComparsionMonth)
THEN DATEADD(month, -1, @ComparisonMonth)
WHEN (Select MAX(Date) from Database1 t2 INNER JOIN on t1.PlayerID=t2.PlayerID) >= DATEADD(month, -7, @ComparisonMonth)
AND (Select MAX(Date) from Database1 t2 INNER JOIN on t1.PlayerID=t2.PlayerID) < DATEADD(month, -4, @ComparsionMonth)
THEN DATEADD(month, -4, @ComparisonMonth)
END
GROUP BY
CustomerID, Date
По сути, я хочу показать только значения за определенный период в зависимости от того, когда клиент последний раз покупал товар. Например, если клиент последний раз покупал товар в течение последних 3 месяцев, я хочу принять все его транзакции за последние 3 месяца. Вместо этого я получаю транзакции от 6 месяцев для клиента, который последний раз приходил 3 месяца назад.
Большое спасибо за помощь и, пожалуйста, дайте мне знать, если вам нужны какие-либо разъяснения.