【发布时间】:2016-03-24 00:46:50
【问题描述】:
首先对糟糕的主题行表示抱歉。
编辑:这里的查询重复 OrderNumbers 我需要查询不重复 OrderNumbers 编辑:缩短了问题并提供了一个更清晰的问题
我有一个表格,其中记录了所有已执行的工单。有两种类型的订单。安装和故障呼叫。我的查询是查找在安装后 30 天内发生的所有故障呼叫,并将该故障呼叫 (TC) 与正确的安装 (IN) 匹配。因此,故障呼叫日期必须在安装后发生,但不得超过 30 天。此外,如果在 30 天内对同一帐户进行两次安装和两次故障调用,并且它们的发生是为了结果必须反映这一点。我遇到的问题是我得到一个与两个不同的故障呼叫 (TC) 匹配的安装订单和一个与两个不同的安装 (IN) 匹配的故障呼叫 (TC)
在 SQL Fiddle 的示例中,请密切注意安装订单号 1234567810 和故障呼叫订单号 1234567890,您会看到我遇到的问题。 http://sqlfiddle.com/#!3/811df/8
select b.accountnumber,
MAX(b.scheduleddate) as OriginalDate,
b.workordernumber as OriginalOrder,
b.jobtype as OriginalType,
MIN(a.scheduleddate) as NewDate,
a.workordernumber as NewOrder,
a.jobtype as NewType
from (
select workordernumber,accountnumber,jobtype,scheduleddate
from workorders
where jobtype = 'TC'
) a join
(
select workordernumber,accountnumber,jobtype,scheduleddate
from workorders
where jobtype = 'IN'
) b
on a.accountnumber = b.accountnumber
group by b.accountnumber,
b.scheduleddate,
b.workordernumber,
b.jobtype,
a.accountnumber,
a.scheduleddate,
a.workordernumber,
a.jobtype
having MIN(a.scheduleddate) > MAX(b.scheduleddate) and
DATEDIFF(day,MAX(b.scheduleddate),MIN(a.scheduleddate)) < 31
【问题讨论】:
标签: sql sql-server sql-server-2008