我如何包括日期索引后5天的所有记录

问题描述 投票:0回答:1

我有一个数据表,我们称它为dt,一个日期索引表,我们称它为dt_idx。我想得到:

  1. 来自dt的所有记录,其中dt.date = dt_idx.date AND
  2. 来自dt的所有记录,其中dt.date是距每个dt_idx.date 1-5天后的记录。 (注意:请勿假设dt.date是连续的,日期可能会丢失)

这里是一个SQL提琴:Click Here

这里是示例架构:

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
sql sql-server tsql
1个回答
1
投票

您的问题有点难以理解。我认为您希望dt中的所有记录都比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)
             );
© www.soinside.com 2019 - 2024. All rights reserved.