Мне нужен запрос SQL Server, чтобы получить что-то вроде:
Client_ID | REF_DATE | SALES | SALES_PREVIOUS_6_MONTHS | SALES_NEXT_6_MONTHS
Но проблема в том, что моя базовая дата не "Сегодня" или что-то в этом роде. Но на самом деле "REF_DATE".
Итак, если покупатель что-то покупает в июле / 2015, я хочу знать, сколько он потратил в этом базовом месяце (июль / 2015), за предыдущий и следующие 6 месяцев с июля / 2015. Мне нужна линия на август и т. Д.
Я использую базу данных счетов, в которой у меня есть агрегация за месяц в первый день.
Я попытался использовать оператор CASE WHEN, но, поскольку он возвращает только «FALSE» для моего условия, он возвращает 0.
SELECT
Client_ID,
REF_DATE,
SUM(SALES),
CASE
WHEN REF_DATE BETWEEN DATEADD(MONTH, -6, REF_DATE) AND DATEADD(MONTH, -1, REF_DATE)
THEN SUM(SALES)
ELSE 0.0
END AS SALES_PREVIOUS_6_MONTHS,
CASE
WHEN REF_DATE BETWEEN DATEADD(MONTH, +1, REF_DATE) AND DATEADD(MONTH, +6, REF_DATE)
THEN SUM(SALES)
ELSE 0.0
END AS SALES_NEXT_6_MONTHS
FROM
dbo.invoices
GROUP BY
Client_ID, REF_DATE
Мой желаемый результат - что-то вроде:
+------------+------------+---------+---------------------------+----------------------+
| Client_ID | REF_DATE | SALES | SALES_PREVIOUS_6_MONTHS | SALES_NEXT_6_MONTHS |
+------------+------------+---------+---------------------------+----------------------+
| 1 | 01/07/2014 | 0 | 0 | 1234 |
| 1 | 01/08/2014 | 0 | 0 | 3579 |
| 1 | 01/09/2014 | 0 | 0 | 7035 |
| 1 | 01/10/2014 | 0 | 0 | 11602 |
| 1 | 01/11/2014 | 0 | 0 | 12836 |
| 1 | 01/12/2014 | 0 | 0 | 17403 |
| 1 | 01/01/2015 | 1234 | 0 | 24059 |
| 1 | 01/02/2015 | 2345 | 1234 | 21714 |
| 1 | 01/03/2015 | 3456 | 3579 | 18258 |
| 1 | 01/04/2015 | 4567 | 7035 | 13691 |
| 1 | 01/05/2015 | 1234 | 11602 | 12457 |
| 1 | 01/06/2015 | 4567 | 12836 | 7890 |
| 1 | 01/07/2015 | 7890 | 17403 | 0 |
| 1 | 01/08/2015 | 0 | 24059 | 0 |
| 1 | 01/09/2015 | 0 | 21714 | 0 |
| 1 | 01/10/2015 | 0 | 18258 | 0 |
| 1 | 01/11/2015 | 0 | 13691 | 0 |
| 1 | 01/12/2015 | 0 | 12457 | 0 |
+------------+------------+---------+---------------------------+----------------------+