У меня есть таблица данных, назовем ее dt
и таблица индексов даты, назовем ее dt_idx
. Я хотел бы получить:
- все записи из dt, где dt.date = dt_idx.date AND
- все записи из dt, где dt.date спустя 1-5 дней от каждогоdt_idx.date. (ПРИМЕЧАНИЕ: НЕ ПРИНИМАЙТЕ, что дата dt.date является ПОСЛЕДОВАТЕЛЬНОЙ, даты могут отсутствовать)
Вот скрипта sql: Нажмите здесь
Вот примерсхема:
CREATE TABLE dt_idx
(
d DATE,
v INT
)
GO
INSERT INTO dt_idx (d, v)
SELECT '2019-02-10', CAST(RAND(CHECKSUM(NEWID())) * 1000 as INT) + 1
UNION
SELECT '2019-03-05', CAST(RAND(CHECKSUM(NEWID())) * 1000 as INT) + 1
CREATE TABLE dt
(
d DATE,
a int,
b int
)
declare @sdate date = '2019-01-01'
, @edate date = '2019-03-24'
; with dates_CTE (date) as (
select @sdate
Union ALL
select DATEADD(day, 1, date)
from dates_CTE
where date < @edate
) select *
into #temp
from dates_CTE
INSERT INTO dt(d, a, b)
SELECT date, CAST(RAND(CHECKSUM(NEWID())) * 1000 as INT) + 1, CAST(RAND(CHECKSUM(NEWID())) * 1000 as INT) + 1
from #temp
Вот вывод, который я ожидаю (столбцы a и b будут случайными числами согласно таблице):
d | a | b
2019-02-10 123 123
2019-02-11 234 344
2019-02-12 234 344
2019-02-13 234 344
2019-02-14 234 344
2019-03-05 234 344
2019-03-06 234 344
2019-03-07 234 344
2019-03-08 234 344
2019-03-09 234 344