SQL Server:在两个单独的行条目之间查找日期

时间:2018-12-11 19:11:28

标签: sql sql-server

我正在尝试提取AccountNumbers的列表,该列表包含2个特定的费用(按代码),至少相隔2天。这些是我表格中的列:

  • 帐号
  • ServiceDate
  • 代码

示例:如果在AccountNumber上有Code = 33967的{​​{1}}和在ServiceDate 12/11/2018上有AccountNumber的{​​{1}},则{{1} }将会输出到结果窗口,因为这两个实例显示在不同的Code = 33968上,并且相隔至少两天。

示例2:如果在ServiceDate 12/15/2018上有AccountNumber的{​​{1}}和{{1}上有ServiceDate的{​​{1}} } 2018年12月11日,AccountNumber将不会输出到结果窗口,因为这两个实例显示在同一Code = 33967上。

示例3:如果在ServiceDate的{​​{1}}上有AccountNumber的{​​{1}}在ServiceDate {{1上有Code = 33968的{​​{1}} }},ServiceDate将不会输出到结果窗口,因为两个AccountNumber之间没有日期。但是,如果它是12/11和12/13,则可以接受,因为中间有一天。

我只关心代码33967和33968,不应考虑所有其他代码。现在,我能够提取所有带有这两个代码的帐户,但无法弄清楚该怎么做。有任何想法吗?

我的代码如下:

ServiceDate

3 个答案:

答案 0 :(得分:1)

这里有一些示例数据。随意添加更多行并进行测试

      create table #Temp_table
    (
    AccountNumber int null
    , ServiceDate date null
    ,Code int null
    )
    insert into #Temp_table values
    (1,'12/11/2018',33967)
    ,(2,'12/15/2018',33968)
    ,(3,'12/11/2018',33967)
    ,(4,'12/12/2018',33968)
,(5,'12/17/2018',33968)
,(6,'12/16/2018',33967)


    ;with CTE_MinDate as (
    select --Code ,
    MinServiceDate = min(Servicedate)
    from #Temp_table 
    --group by Code
    )
    --select * from CTE_MinDate

    select *
    from (
    select *
    ,Days_Diff = datediff(day,MinServiceDate, Servicedate)
    from (
    select a.*
    ,MinServiceDate = (select MinServiceDate from CTE_MinDate)
    from #Temp_table a
    where a.Code in ( 33967,33968)
    ) a
    ) b where Days_Diff >= 2

答案 1 :(得分:0)

这是您想要的吗?

SELECT DISTINCT t.AccountNumber
FROM dbo.table t
WHERE t.Code = '33968' AND
      EXISTS (SELECT 1
              FROM dbo.table t2
              WHERE t2.AccountNumber = t.AccountNumber AND
                    t2.Code = '33967' AND
                    t2.ServiceDate <> t.ServiceDate
             );

答案 2 :(得分:0)

如果仅是您想要的帐号,那么如何:

SELECT AccountNumber
FROM dbo.[Table]
GROUP BY AccountNumber
HAVING COUNT(CASE CODE WHEN 33968 THEN 1 END) > 0
   AND COUNT(CASE CODE WHEN 33967 THEN 1 END) > 0;