繁体   English   中英

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

[英]SQL Server : find dates between two separate row entries

我试图提取一个AccountNumbers列表,该列表具有2个特定的费用(按代码),至少相隔2天。 这些是我表的列:

  • 帐号
  • ServiceDate

例如:如果有AccountNumberCode = 33967ServiceDate 12/11/2018AccountNumberCode = 33968ServiceDate 12/15/2018 ,该AccountNumber将被输出到结果窗口,因为这两个实例显示在不同ServiceDate ,且相隔至少2天。

实施例2:如果有一个AccountNumberCode = 33967ServiceDate 2018年12月11日和AccountNumberCode = 33968ServiceDate 2018年12月11日,该AccountNumber将不被输出到结果窗口,因为这两个实例显示在同一ServiceDate

实施例3:如果有一个AccountNumberCode = 33967ServiceDate 2018年12月11日和AccountNumberCode = 33968上ServiceDate 12/12/2018 ,该AccountNumber将不被输出到结果窗口,因为有之间没有日期这两个ServiceDate 但是,如果它是12/11和12/13,则可以接受,因为中间有一天。

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

我的代码如下:

SELECT AccountNumber, ServiceDate 
FROM dbo.table
WHERE Code = '33968'

INTERSECT

SELECT AccountNumber, ServiceDate 
FROM dbo.table
WHERE Code = '33967'

在这里,您将获得一些示例数据。 随意添加更多行并进行测试

      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

这是您想要的吗?

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
             );

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

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM