Это сложно сформулировать. Я нахожусь на SQLSERVER 2017. Что я хочу сделать, это выбрать первое вхождение строк в наборе на основе того, как они сгруппированы. Тем не менее, эти «группы» повторяются иногда. Группировка - спонсор_дист_ид, но проблема для меня в том, что я не могу просто получить первое вхождение каждого спонсора_дист_ид по дате, потому что эта группа повторяется для другого набора дат позже. Мне нужно первое появление этого тоже - и так далее. Пример:
+---------+-----------------+------------------+------------------+
| dist_id | sponsor_dist_id | it_beg_date | it_end_date |
+---------+-----------------+------------------+------------------+
| 76566 | 48584 | 10/13/2015 00:00 | 10/30/2015 00:00 |
|* 76566 | 48584 | 10/30/2015 00:00 | 11/28/2016 00:00 |
|* 76566 | 48584 | 11/28/2016 00:00 | 11/28/2016 00:00 |
| 76566 | 4 | 11/28/2016 00:00 | 11/28/2016 00:00 |
| 76566 | 48584 | 11/28/2016 00:00 | 11/29/2016 00:00 |
|* 76566 | 48584 | 11/29/2016 00:00 | 11/28/2018 00:00 |
|* 76566 | 48584 | 11/28/2018 00:00 | 11/29/2018 00:00 |
|* 76566 | 48584 | 11/29/2018 00:00 | 11/30/2018 00:00 |
| 76566 | 4 | 11/30/2018 00:00 | NULL |
+---------+-----------------+------------------+------------------+
* Для генерации источника
SELECT convert(numeric(20,0),dist_id) dist_id, convert(numeric(20,0),sponsor_dist_id) sponsor_dist_id, convert(datetime,it_beg_date) it_beg_date, convert(datetime, it_end_date) it_end_date
INTO #tmp_GridResults_1
FROM (
SELECT N'76566' AS [dist_id], N'48584' AS [sponsor_dist_id], N'2015-10-13 00:00:00.000' AS [it_beg_date], N'2015-10-30 00:00:00.000' AS [it_end_date] UNION ALL
SELECT N'76566' AS [dist_id], N'48584' AS [sponsor_dist_id], N'2015-10-30 00:00:00.000' AS [it_beg_date], N'2016-11-28 00:00:00.000' AS [it_end_date] UNION ALL
SELECT N'76566' AS [dist_id], N'48584' AS [sponsor_dist_id], N'2016-11-28 00:00:00.000' AS [it_beg_date], N'2016-11-28 00:00:00.000' AS [it_end_date] UNION ALL
SELECT N'76566' AS [dist_id], N'4' AS [sponsor_dist_id], N'2016-11-28 00:00:00.000' AS [it_beg_date], N'2016-11-28 00:00:00.000' AS [it_end_date] UNION ALL
SELECT N'76566' AS [dist_id], N'48584' AS [sponsor_dist_id], N'2016-11-28 00:00:00.000' AS [it_beg_date], N'2016-11-29 00:00:00.000' AS [it_end_date] UNION ALL
SELECT N'76566' AS [dist_id], N'48584' AS [sponsor_dist_id], N'2016-11-29 00:00:00.000' AS [it_beg_date], N'2018-11-28 00:00:00.000' AS [it_end_date] UNION ALL
SELECT N'76566' AS [dist_id], N'48584' AS [sponsor_dist_id], N'2018-11-28 00:00:00.000' AS [it_beg_date], N'2018-11-29 00:00:00.000' AS [it_end_date] UNION ALL
SELECT N'76566' AS [dist_id], N'48584' AS [sponsor_dist_id], N'2018-11-29 00:00:00.000' AS [it_beg_date], N'2018-11-30 00:00:00.000' AS [it_end_date] UNION ALL
SELECT N'76566' AS [dist_id], N'4' AS [sponsor_dist_id], N'2018-11-30 00:00:00.000' AS [it_beg_date], NULL AS [it_end_date] ) t;
SELECT [dist_id], [sponsor_dist_id], [it_beg_date], [it_end_date]
FROM #tmp_GridResults_1
DROP TABLE #tmp_GridResults_1
GO
И чего я хочу добиться, это:
+---------+-----------------+------------------+------------------+
| dist_id | sponsor_dist_id | it_beg_date | it_end_date |
+---------+-----------------+------------------+------------------+
| 76566 | 48584 | 10/13/2015 00:00 | 10/30/2015 00:00 |
| 76566 | 4 | 11/28/2016 00:00 | 11/28/2016 00:00 |
| 76566 | 48584 | 11/28/2016 00:00 | 11/29/2016 00:00 |
| 76566 | 4 | 11/28/2018 00:00 | NULL |
+---------+-----------------+------------------+------------------+
Так в основном удалите строки, которые отмечены звездочкой. Однако теперь у меня есть строки, в которых даты начала и окончания имеют пробелы. Поэтому мне нужно, чтобы даты были смежными (то есть, дата начала следующей строки должна быть датой окончания первой строки). Надеюсь, что все имеет смысл. Спасибо!
Пример:
+---------+-----------------+------------------+------------------+
| dist_id | sponsor_dist_id | it_beg_date | it_end_date |
+---------+-----------------+------------------+------------------+
| 76566 | 48584 | 10/13/2015 00:00 | 11/28/2016 00:00 |
| 76566 | 4 | 11/28/2016 00:00 | 11/28/2016 00:00 |
| 76566 | 48584 | 11/28/2016 00:00 | 11/28/2018 00:00 |
| 76566 | 4 | 11/28/2018 00:00 | NULL |
+---------+-----------------+------------------+------------------+