我有一张包含大量数据的表格。这是我的表格的样子:
TBLA
RcdID ClientID ApptType ApptDate
1 7 1 01/01/2016
2 7 2 07/02/2016
3 8 1 02/16/2016
4 8 2 09/30/2016
5 9 1 03/01/2016
6 9 2 10/03/2016
以下是我尝试过滤的字段。如您所见,每个客户端可以有不同的ApptType
1或2.通常AppTType = 2是在AppTType = 1后6-9个月。
我希望找到的是AppType = 2的所有客户,只有AppType = 1发生在2016年1月1日至2016年2月15日之间
我写了这个查询,但我不确定我是否正确地做了。我有成千上万的记录,希望得到正确的结果。
Select * from tblA innerJoin TblA x on tblA.ClientId = x.ClientId and
x.ApptType=1 and
x.ApptDate >='01/01/2016' and
x.ApptDate < ='02/15/2016'
WHERE tblA.AppType=2
希望得到这些结果:
RcdID ClientID ApptType ApptDate
2 7 2 07/02/2016
4 8 2 09/30/2016
在我的结果集中,我只希望看到这两个客户,因为他们的ApptType = 1日期介于&lt; 01/01/2016和&#39; 02/15 / 2016&#39;而ClientID = 9在&#39; 02/15/2016&#39;
之后的AppType = 1日期感谢任何帮助。
答案 0 :(得分:1)
Select * from tblA innerJoin TblA x on tblA.ClientId = x.ClientId
WHERE tblA.AppType=2
and
x.ApptType=1 and
(x.ApptDate >='01/01/2016' and
x.ApptDate < ='02/15/2016')
答案 1 :(得分:1)
你可以尝试这样的事情。
SELECT *
FROM TblA a
WHERE a.ApptType = 2
AND a.ClientID IN
(SELECT ClientID
FROM TblA
WHERE ClientID = a.ClientID
AND ApptType = 1
AND ApptDate >= cast('01/01/2016' AS DATE)
AND ApptDate < cast('02/15/2016' AS DATE) )