SQL Соответствие даты многие ко многим для поля идентификатора - PullRequest
1 голос
/ 26 июня 2019

Редактировать : фиксированная дата начала для пользователя 2

У меня есть список идентификаторов пользователей, каждый из которых имеет много дат начала и многих дат окончания.

Дата началаможет быть записано много раз после «фактической» даты начала «события», то же самое относится и к дате окончания.

Результатом должны быть каждая первая дата начала и первая дата окончания для каждого «события» пользователя

Надеюсь, это имеет смысл, см. Пример ниже.

Спасибо!

Предполагается, что приведены следующие таблицы:

Стартовая таблица:

+--------+-------------+
| UserID |  Start      |
+--------+-------------+
|      1 | 2019-01-01  |
|      1 | 2019-01-02  |
|      1 | 2019-01-03  |
|      1 | 2019-04-01  |
|      1 | 2019-04-02  |
|      1 | 2019-04-03  |
|      2 | 2019-06-01  |
|      2 | 2019-06-02  |
|      2 | 2019-10-01  |
|      2 | 2019-10-02  |
+--------+-------------+

Конечная таблица:

+--------+------------+
| UserID |  End       |
+--------+------------+
|      1 | 2019-03-01 |
|      1 | 2019-03-02 |
|      1 | 2019-03-03 |
|      1 | 2019-05-01 |
|      1 | 2019-05-02 |
|      1 | 2019-05-03 |
|      2 | 2019-08-01 |
|      2 | 2019-08-02 |
|      2 | 2019-12-01 |
|      2 | 2019-12-02 |
+--------+------------+

Результат:

+--------+------------+------------+
| UserID |   Start    |  End       |
+--------+------------+------------+
|      1 | 2019-01-01 | 2019-03-01 |
|      1 | 2019-04-01 | 2019-05-01 |
|      2 | 2019-06-01 | 2019-08-01 |
|      2 | 2019-10-01 | 2019-12-01 |
+--------+------------+------------+

1 Ответ

0 голосов
/ 26 июня 2019

Не уверен, что согласен с вашим 2019-10-02

Вот одно из решений

Пример

Select UserID
      ,[Start]  = min([Start])
      ,[End]
From ( 
        Select A.* 
              ,[End] = (Select min([End]) From EndTable Where UserID=A.UserID  and [End] >= A.Start )
        From  StartTable A
     ) A
Group By UserID,[End]

Returns

UserID  Start       End
1       2019-01-01  2019-03-01
1       2019-04-01  2019-05-01
2       2019-06-01  2019-08-01
2       2019-10-01  2019-12-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...