использование cte и переменных для обновления дат в SQL - PullRequest
0 голосов
/ 26 июня 2018

В настоящее время я пытаюсь реализовать небольшой код, который будет принимать даты для данного списка из 160 строк и обновлять их, чтобы они были через одну минуту после другой даты из той же таблицы.

так, например, из этого пошло бы от:

> 1058841   2018-06-20 14:15:04.000 Copy of NtO produced
> 1058841   2018-06-14 19:58:03.000 NTO service date set to 24/05/2018

> 969565    2018-06-20 14:15:01.000 17530   Copy of NtO produced
> 969565    2018-06-14 19:58:03.000 148 NTO service date set to 24/05/2018

к этому:

> 1058841   2018-06-14 19:59:03.000 Copy of NtO produced
> 1058841   2018-06-14 19:58:03.000 NTO service date set to 24/05/2018

> 969565    2018-06-14 19:59:03.000 17530   Copy of NtO produced
> 969565    2018-06-14 19:58:03.000 148 NTO service date set to 24/05/2018

код, который у меня пока есть:

declare @thisdate datetime

set @thisdate = (
select * from (
select row_number() over (partition by te_system_ref order by (select 0)) as rownumber, te_date, te_system_ref, te_event from ticket_events where te_system_ref in 
(select sl_system_ref from statutory_letter where sl_letter_batch = 9429)and te_event = 'Copy of NtO produced'
) t
where rownumber = 1
);

with rn as 
( select * from (
select row_number() over (partition by te_system_ref order by (select 0)) as rownumber1, te_date, te_system_ref, te_event from ticket_events where te_system_ref in 
(
select sl_system_ref from statutory_letter where sl_letter_batch = 9429 
)
and te_event = 'Copy of NtO produced'
) t where rownumber1 = 1)

select * from rn where te_date between dateadd(hour,1,@thisdate) and dateadd(hour,-1,@thisdate)

в настоящее время это дает мне ошибку:

Сообщение 116, Уровень 16, Состояние 1, Строка 9 Может быть только одно выражение указывается в списке выбора, когда подзапрос не вводится с СУЩЕСТВУЕТ.

Если бы кто-нибудь мог объяснить, где я иду не так, или указать мне правильное направление, это было бы очень ценно

1 Ответ

0 голосов
/ 26 июня 2018
set @thisdate = (
select * from (
select row_number() over (partition by te_system_ref order by (select 0)) as rownumber, te_date, te_system_ref, te_event from ticket_events where te_system_ref in 
(select sl_system_ref from statutory_letter where sl_letter_batch = 9429)and te_event = 'Copy of NtO produced'
) t
where rownumber = 1
);

Здесь вы пытаетесь присвоить несколько значений скалярной переменной.

Полагаю, вы действительно хотите te_date.

set @thisdate = (
select te_date from (
select row_number() over (partition by te_system_ref order by (select 0)) as rownumber, te_date from ticket_events where te_system_ref in 
(select sl_system_ref from statutory_letter where sl_letter_batch = 9429)and te_event = 'Copy of NtO produced'
) t
where rownumber = 1
);
...