我正在尝试提取AccountNumbers
的列表,该列表包含2个特定的费用(按代码),至少相隔2天。这些是我表格中的列:
示例:如果在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
答案 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;