首页 > 解决方案 > 对此的SQL解决方案?

问题描述

汽车表(Car_id、Cus_id、型号、Delivery_Date、Reg_No)

      101   1   Yaris - Active  05-Jan-2016 aa-168
      102   1   Yaris           06-Jan-2017 ab-168
      103   2   Fortuner        07-Jan-2017 aa-1111
      104   3   Vios            08-Jan-2017 aa-1234
      105   3   Altis           09-Feb-2017 ab-5555
      106   4   Camry           10-Feb-2016 ab-9999
      107   5   Hilux Revo      11-Feb-2017 aa-6666

服务表(Car_id、Service_Date、Service_Amount、Service_Detail)

      101   05-Feb-2016 2565    1000km
      101   10-Aug-2016 3400    10000km
      101   20-Feb-2016 2100    20000km
      102   06-Feb-2017 2565    1000km
      103   07-May-2017 3400    10000km
      104   08-Feb-2017 2565    1000km
      105   09-May-2017 2565    1000km
      106   10-Mar-2016 2565    1000km
      106   15-Aug-2016 3400    10000km
      106   20-Dec-2016 2100    20000km

我的目标是从两个表中查询值,以便它显示

目标表(模型、Reg_No、Last_Service、Previous_Service)

              Yaris-Active aa-168 20-Feb-2016 10-Aug-2016
              Yaris        ab-168 06-Feb-2017 -
              .............................................
              Camry        aa-9999 20-Dec-2016 15-Aug-2016

如您所见,Last_Service 将包含汽车使用该服务的最后日期,而 Previous_Service 将包含汽车在服务之前使用该服务的日期。我的基本步骤是在汽车和服务台之间使用 LEFT JOIN,因为它倾向于汽车台。

我的预期步骤是查询 Car_id 和 Count(Car_id) 以及 Group By Car_id,因为它将指示该汽车的存在数量。之后,使用计数来指示该模型的最后一行和倒数第二行,并将值指定给指定列...但是,我必须将其转换为 SQL...。

 SELECT Model, Reg_No, Service_Date As Last_Service, Service_Date As Previous_Date
  FROM Car LEFT JOIN Service ON Car.Car_id = Service.Car_id

..................................................... .....................

   SELECT Car_id, Count(Car_id) As No.Times
   From Service
   Group BY Car_id

我需要帮助...

标签: sqlsql-server

解决方案


试试这样...

 SELECT    Model,
            Reg_No,
            Service_Date
  INTO      #Temp_Output_1
  FROM      Temp_Car        Car
  JOIN      Temp_Service    Servic
    ON  (Car.Car_id =   Servic.Car_id)

  SELECT    Model,
            Reg_No,
            Service_Date,
            (SELECT MAX(Service_Date) FROM #Temp_Output_1 T1 WHERE T1.Reg_No = T2.Reg_No AND T1.Service_Date < T2.Service_Date)  AS Prev_Service_Date
  FROM      #Temp_Output_1 T2
  WHERE     T2.Service_Date =   (
                                    SELECT  MAX(Service_Date)
                                    FROM    #Temp_Output_1 T3
                                    WHERE   T2.Reg_No   =   T3.Reg_No
                                )

推荐阅读