4个有公司地址问题的任务

时间:2017-08-16 15:45:59

标签: sql-server

我有4个任务:

  1. 我想选择cIds(公司)公司地址(公司名称(公司),街道(街道)和邮政编码(代码)的组合)不是CURRENT交付地址(公司组合)名称(del),街道(街道2)和邮政编码(cod2)已经=>订单已经发送到另一个地址,在第一次使用地址后(使用地址的第一个订单日期(Date1)和最新订购此地址(日期2)。[没有订单到实际的公司地址]

  2. 我想选择行cIds(公司)公司地址(公司名称(公司),街道(街道)和邮政编码(代码)的组合)是明年1年的实际交付地址并且不是CURRENT交付地址(公司名称(del),街道(街道2)和邮政编码(cod2)的组合=>订单已经发送到另一个地址,在地址被用于最少1年之后(使用地址的第一个订单日期(Date1)和此地址的最新订单(Date2)。[不再向公司地址发出订单,公司地址为最短1年的送货地址]

  3. 我想选择cIds(公司)公司地址(公司名称(公司),街道(街道)和邮政编码(代码)的组合)是CURRENT交货地址(公司名称的组合) (del),街道(街道2)和邮政编码(cod2)AND订单也被发送到另一个地址,在第一次使用地址后(使用地址的第一个订单日期(Date1)和最新订单到此地址(日期2)。 [订单到实际的公司地址和另一个地址]

  4. 我想选择cIds(公司)公司地址(公司名称(公司),街道(街道)和邮政编码(代码)的组合)是CURRENT交货地址(公司名称的组合) (del),街道(街道2)和邮编(cod2)FOR MIN 1年和订单也被发送到另一个地址,地址被用于最少1年(使用地址的第一个订单的日期(Date1)这个地址的最新订单(Date2)。 [订单到实际的公司地址和另一个地址]

  5. cID =公司的身份证件

    日期1 =首次订购日期

    日期2 =上次/最新订单的日期

    以下是一些数据,以便于理解:

    |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

    这是我的实际工作点,我无法继续 - 我知道有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)
              ) 
    

    - &GT;请帮我一个忙,并在你认为得到答案的地方标记任务

1 个答案:

答案 0 :(得分: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)