2017-08-16 68 views
0

我有4项任务:4任务,公司地址问题

  1. 我要选择的CID(company's),其中公司地址(公司名称(公司),街道(街道的组合)和邮政编码(代码))不是当前的交付地址(公司名称(del),街道(街道2)和邮政编码(cod2)的组合=>订单已在第一次使用地址后发送给另一个地址使用地址的第一个订单的日期(Date1)和最新的订单到这个地址(Date2)。[没有订单到实际的公司地址了]

  2. 我想选择行cIds(compan )公司地址(公司名称(公司),街道(街道)和邮政编码(代码)的组合)是实际交付时间为1年以内,并且不是当前的交付地址(公司名称的组合),街道(街道2)和邮政编码(cod2)了=>订单已发送到另一个地址,地址用完后至少1年(使用地址的第一个订单日期(Date1)和最新订单地址(Date2)。 [公司地址(公司地址),公司地址(公司地址),公司地址(公司地址),公司地址(公司地址),公司地址街道)和邮政编码(代码))是当前的交付地址(公司名称(del),街道(街道2)和邮政编码(cod2)的组合,并且在第一次使用地址之后,订单也被发送给另一地址(使用ADRESS(日期1)和最新为了这个ADRESS(日期2)的一阶的日期。 [订单,实际公司地址和另一个ADRESS]

  3. 我要选择的CID(company's )公司地址(组合)公司名称(公司),街道(街道)和邮政编码(代码))是CURRENT交付地址(公司名称(del),街道(街道2)和邮政编码(cod2)的组合,最短1年,订单也已发送到另一个地址后,使用地址至少1年(使用地址的第一个订单的日期(Date1)和最新订单到此地址(Date2)。 [订单实际公司地址和另一ADRESS]

CID =公司的ID

日期1 =第一级的日期

日期2 =最后/最新的顺序

日期

Here's一些数据,使其更易于理解:

|cID ||company|Street |Code|del  |Street2 |Cod2|Date 1 |Date 2 | 
+------------------------------------------------------------------------+ 
|1 ||Ex1 |ABC Rd.1|4025|Ex1  |DEL St.1|0212|01.01.2015|06.03.2015| 
|1 ||Ex1 |ABC Rd.1|4025|Ex1  |REF Wy.1|9875|26.02.2015|16.05.2015| 
|1 ||Ex1 |ABC Rd.1|4025|Ex1  |ABC Rd.1|4025|13.06.2015|18.07.2016| 
|1 ||Ex1 |ABC Rd.1|4025|Ex1  |RAD St.7|1238|13.08.2016|08.08.2017| 
|2 ||Ex2 |HIO Wy.1|9999|Ex2  |DEL St.1|0212|13.03.2015|09.07.2015| 
|2 ||Ex2 |HIO Wy.1|9999|Ex2  |REG St.1|6754|21.02.2015|16.05.2015| 
|2 ||Ex2 |HIO Wy.1|9999|Ex2  |BLA Rd.5|0897|01.03.2015|06.12.2015| 
|2 ||Ex2 |HIO Wy.1|9999|Ex2  |HIO Wy.1|9999|09.01.2017|26.06.2017| 
|2 ||Ex2 |HIO Wy.1|9999|Ex2  |RAD St.7|1238|13.07.2017|08.08.2017| 
|3 ||Ex3 |REG St.1|1114|Ex3  |REG St.1|1114|21.03.2015|16.04.2017| 
|3 ||Ex3 |REG St.1|1114|Ex3  |DEL St.9|0212|13.11.2016|09.02.2017| 
|4 ||Ex4 |FAR RD.9|4567|Ex4  |FAR RD.9|4567|09.10.2016|26.12.2016| 
|4 ||Ex4 |FAR RD.9|4567|Ex4  |DDR Wy.2|0897|01.03.2017|06.07.2016| 

结果

任务1:CID 2

任务2:CID 1

任务3:CID4

任务4:CID 3

这是我的实际工作点和I'我不知道如何开始编写4个不同的代码,但我还没有真正了解如何启动其中的一个:(

SELECT cID 
FROM Table1 
WHERE Street = Street2 
AND Code = Cod2 
AND Date1 > ( 
      SELECT !=MAX(Date2) 
      FROM Table1 as delivery 
      WHERE Table1.cID = delivery.cID 
      AND (delivery.Street2 <> Street OR delivery.Cod2 <> Code) 
     ) 

- >请帮我一个忙,并标记你认为你得到了

+0

能代码被用来确定唯一地址? – KeithL

+0

我不明白你的意思:/ – AbsoluteBeginner

回答

0

1回答任务:

;with cte as 
(
select cID ,company,Street ,Code,del,Street2 ,Cod2,[Date 1],[Date 2] 
    , row_number() over (partition by cID order by [Date 1]) rnfirst 
    , row_number() over (partition by cID order by [Date 2] desc) as rnLast 
from Table1 
) 
select t1.cID 
from cte t1 
join cte t2 on t1.cId=t2.cID 
where t2.rnLast=1 
and t1.rnFirst = 1 
and (t1.Street<>t2.Street2 or t1.Code<>t2.Cod2) 
+0

我没有看到你要求的东西。与最新订单相比的第一个订单。我会补充说 – KeithL

+0

我不明白你的意思 - 不幸的是我的英语不是最好的(对不起)。我想回答你,但不明白你想从我这里得到什么 – AbsoluteBeginner