SQL SERVER - объединяйтесь с таблицей календаря, чтобы получить выходные, перенести значение с пятницы на субботу и воскресенье - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь включить субботу и воскресенье в текущие результаты и перенести значения с пятницы на субботу и воскресенье.

Мой начальный набор данных:

create table AA as (userid varchar(10), return_date datetime,  first_date  
datetime);
insert into AA 
select ('A',  '2019-06-07', '2019-06-01 15:46:43.000')
union all 
select ('A',  '2019-06-10', '2019-06-01 15:46:43.000')
union all 
select ('B',  '2019-06-07', '2019-06-03 15:46:43.000')
union all 
select ('B',  '2019-06-10', '2019-06-03 15:46:43.000');

Я пытался использовать полное внешнее соединение / перекрестное соединение / отставание / опережение, но безуспешно.Я хочу избежать цикла, и я не думаю, что это потребует цикла.

Кроме того, поскольку я работаю над хранилищем данных SQL Azure, существует ряд ограничений, например, рекурсивное cte ограничено.

Вот результат, который я ищу:

userid,     return_date,        first_date
A,          '2019-06-07',       '2019-06-01 15:46:43.000'
A,          '2019-06-08',       '2019-06-01 15:46:43.000'
A,          '2019-06-09',       '2019-06-01 15:46:43.000'
A,          '2019-06-10',       '2019-06-01 15:46:43.000'
B,          '2019-06-07',       '2019-06-03 15:46:43.000'
B,          '2019-06-08',       '2019-06-03 15:46:43.000'
B,          '2019-06-09',       '2019-06-03 15:46:43.000'
B,          '2019-06-10',       '2019-06-03 15:46:43.000'

Спасибо за вашу помощь заранее.Действительно ценю это.Спасибо!

1 Ответ

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

Если я понимаю, что вы спрашиваете, я думаю, что это будет работать:

    select * from aa
    union
    select userid, dateadd(d,1,return_date) return_date, first_date from aa 
        where datepart(dw, return_date) = 6 -- only returns Fridays, translate to Sat
    union
    select userid, dateadd(d,2,return_date) return_date, first_date from aa 
        where datepart(dw, return_date) = 6 -- only returns Fridays, translate to Sun
    order by userid, return_date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...