Как включить все записи через 5 дней после индекса даты - PullRequest
0 голосов
/ 25 октября 2019

У меня есть таблица данных, назовем ее dt и таблица индексов даты, назовем ее dt_idx. Я хотел бы получить:

  1. все записи из dt, где dt.date = dt_idx.date AND
  2. все записи из 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

1 Ответ

5 голосов
/ 25 октября 2019

Ваш вопрос немного сложен для понимания. Я думаю, что вы хотите, чтобы все записи от dt были на 0–5 дней позже, чем записи в dt_idx.

. Если это так, вы можете использовать exists:

SELECT *
FROM dt
WHERE EXISTS (SELECT 1
              FROM dt_idx di
              WHERE dt.d >= di.d AND
                    dt.d < DATEADD(day, 5, di.d)
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...