У меня есть последовательность записей, на которые выставлен счет.При создании счета все элементы до даты выставления счета, которые не были выставлены, получат текущий идентификатор счета.
Теперь у меня есть список записей и одна из записей, которые были выставлены.Мне нужен запрос, который назначает правильный invoiceItemId для записей.
Это мои примеры данных
Create table #InvoiceItems
(
ID int,
SegmentID int,
Created dateTime,
[Type] int,
InvoiceItemID int
)
INSERT INTO #InvoiceItems values (1002330 , 1000322, '2018-05-29 16:06:31.257', 1, NULL)
INSERT INTO #InvoiceItems values (1002331 , 1000322, '2018-05-29 16:06:31.257', 2, NULL)
INSERT INTO #InvoiceItems values (1002332 , 1000322, '2018-05-29 16:06:31.257', 3, NULL)
INSERT INTO #InvoiceItems values (1002333 , 1000322, '2018-05-29 16:06:31.257', 4, 344)
INSERT INTO #InvoiceItems values (1002334 , 1000322, '2018-05-29 16:06:31.257', 5, NULL)
INSERT INTO #InvoiceItems values (1002335 , 1000322, '2018-05-29 16:06:31.257', 6, NULL)
INSERT INTO #InvoiceItems values (1002370 , 1000322, '2018-05-30 15:33:48.453', 2, NULL)
INSERT INTO #InvoiceItems values (1002371 , 1000322, '2018-05-30 15:33:48.453', 3, NULL)
INSERT INTO #InvoiceItems values (1002604 , 1000322, '2018-06-04 10:25:56.603', 3, NULL)
INSERT INTO #InvoiceItems values (1002605 , 1000322, '2018-06-04 10:25:56.603', 4, 344)
INSERT INTO #InvoiceItems values (1002685 , 1000369, '2018-06-05 10:45:53.570', 1, NULL)
INSERT INTO #InvoiceItems values (1002686 , 1000369, '2018-06-05 10:45:53.570', 2, NULL)
INSERT INTO #InvoiceItems values (1002687 , 1000369, '2018-06-05 10:45:53.570', 3, NULL)
INSERT INTO #InvoiceItems values (1002688 , 1000369, '2018-06-05 10:45:53.570', 4, 274)
INSERT INTO #InvoiceItems values (1002689 , 1000369, '2018-06-05 10:45:53.570', 5, NULL)
INSERT INTO #InvoiceItems values (1002690 , 1000369, '2018-06-05 10:45:53.570', 6, NULL)
INSERT INTO #InvoiceItems values (1002691 , 1000369, '2018-06-05 12:26:52.153', 3, NULL)
INSERT INTO #InvoiceItems values (1002692 , 1000369, '2018-06-05 12:26:52.153', 4, 275)
INSERT INTO #InvoiceItems values (1002761 , 1000369, '2018-06-06 11:19:11.613', 2, NULL)
INSERT INTO #InvoiceItems values (1002762 , 1000369, '2018-06-06 11:19:11.613', 3, NULL)
INSERT INTO #InvoiceItems values (1002763 , 1000369, '2018-06-06 11:19:18.503', 2, NULL)
INSERT INTO #InvoiceItems values (1002764 , 1000369, '2018-06-06 11:19:18.503', 3, NULL)
INSERT INTO #InvoiceItems values (1002765 , 1000369, '2018-06-06 11:20:10.333', 2, NULL)
INSERT INTO #InvoiceItems values (1002766 , 1000369, '2018-06-06 11:20:10.333', 3, NULL)
INSERT INTO #InvoiceItems values (1002767 , 1000369, '2018-06-06 11:20:10.333', 4, 276)
INSERT INTO #InvoiceItems values (1002768 , 1000369, '2018-06-06 11:20:32.677', 2, NULL)
INSERT INTO #InvoiceItems values (1002769 , 1000369, '2018-06-06 11:20:32.677', 3, NULL)
select * from #InvoiceItems order by SegmentID , Created
DROP table #InvoiceItems
На рисунке показано, как элементы объединяются.Запись с типом 4 определяет время, когда счет был сгенерирован.Последние 2 элемента (id 1002768, 1002769) не получили счета и не должны получать InnvoiceItemID.Записи с идентификатором 1002333 и 1002605 имеют один и тот же InvoiceItemID, который является более точным случаем.Если это усложняет задачу, пожалуйста, предположите, что у него есть 2 разных InvoiceItemIds

Это ожидаемый результат
