SQL查询where子句用于报告

时间:2016-02-01 02:25:20

标签: sql sql-server sql-server-2008

我们说这张表有以下数据:

Service_ID  Cust_ID  Service_Date   Next_Service_Date
-----------------------------------------------------
1            15      2016-01-1      2016-01-31
2            21      2016-01-1      2016-01-31
3            15      2016-01-31     2016-03-1

我需要一个条件来检查Next_Service_Date是否在每个客户中找到Service_Date而不是整个表格。

例如ID = 15和Service_ID = 3的客户,您可以看到Service_Date是在2016-01-31

Next_Service_DateService_ID = 1

相同

因此查询的输出应为

Service_ID  Cust_ID  Service_Date   Next_Service_Date
------------------------------------------------------
2            21      2016-01-1      2016-01-31

我希望我把事情弄清楚。

请注意为什么我要显示记录#2,因为该客户在Service_Date中没有与Next_Service_Date中的日期匹配的记录

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要double value = get_input();

not exists

答案 1 :(得分:0)

编辑 - 我想我现在理解你的问题了 - 你想找到所有应该安排下一个服务日期的记录,但不是吗?如果是这样,组合半连接和反连接就可以做到。

如果我不合适,请让我知道我误解的地方。

select
  t1.*
from
  MyTable t1
where exists (
  select null
  from MyTable t2
  where
    t1.Next_Service_Date = t2.Service_Date
)
and not exists (
  select null
  from MyTable t2
  where
    t1.Cust_Id = t2.Cust_Id and
    t1.Next_Service_Date = t2.Service_Date
)