У меня есть таблица, которая дает информацию о том, какие пользователи купили пакет, когда он запустился, срок его действия истек и т.д.
таблица:
+------+--------------+------------+------------+---------+
| user | Package_Type | Start | End | Status |
+------+--------------+------------+------------+---------+
| 111 | A | 2019-06-01 | 2019-06-18 | Valid |
| 123 | A | 2019-06-01 | 2019-06-18 | Valid |
| 124 | A | 2019-06-02 | 2019-06-06 | Expired | //Type A expired
| 124 | C | 2019-06-02 | 2019-06-18 | Valid |
| 125 | B | 2019-06-03 | 2019-06-09 | Expired |
| 126 | B | 2019-06-04 | 2019-06-20 | Valid |
| 127 | B | 2019-06-04 | 2019-06-07 | Expired | // Type B expired
| 124 | B | 2019-06-06 | 2019-06-18 | Valid | //Renewal to type B after expiry of type A
| 127 | B | 2019-06-08 | 2019-06-18 | Valid | // Renwal to Type B
+------+--------------+------------+------------+---------+
За промежуток времени (пусть таймфрейм будет WHERE start BETWEEN '2019-06-01' AND '2019-06-10'
) Я хотел бы узнать, сколько пользователей, срок действия пакета которых истек, обновили его.
Ожидаемый результат выглядит следующим образом
+------------+---------+---------+
| Date | Expired | Renewed |
+------------+---------+---------+
| 2019-06-01 | 0 | 0 |
| 2019-06-02 | 0 | 0 |
| 2019-06-03 | 0 | 0 |
| 2019-06-04 | 0 | 0 |
| 2019-06-05 | 0 | 0 |
| 2019-06-06 | 1 | 1 | // Expiry and renewal of user 124
| 2019-06-07 | 1 | 0 | // Expiry of user 127
| 2019-06-08 | 0 | 1 |// Renewal of user 127
| 2019-06-09 | 1 | 0 |// Expiry of user 125
| 2019-06-10 | 0 | 0 |
+------------+---------+---------+
Нет необходимости, чтобы пользователь обновлял пакет такого же типа.
- Для пользователя 124 Тип A истек, но он обновлен до Типа B. (Также обратите внимание, что пользователь 124 все еще активен для типа C).
- Так что могут быть случаи, когда срок действия типа пакета истекает, но тот же пользователь может быть активным в каком-то другом пакете, и он может обновиться до некоторого другого пакета.
- Я просто хочу знать после истечения срока действия пакета, когда пользователь обновляется (даже если он активен в любом другом пакете)
Обновление 1
Я также хотел, чтобы вышеуказанные данные были представлены как
+--------------+---------+---------+
| Package_Type | Expired | Renewed |
+--------------+---------+---------+
| A | 1 | 0 |
| B | 2 | 2 |
| C | 0 | 0 |
+--------------+---------+---------+
Я хотел запрос, в котором, если я изменю
WHERE start BETWEEN '2019-06-01' AND '2019-06-10'
) *
Таблица выше будет обновлена в соответствии с start
filter
Ссылка на SQL Server