在Oracle SQL(第2部分)中,如果表A中的日期介于表B中的日期之间,如何连接这两列?

在Oracle SQL(第2部分)中,如果表A中的日期介于表B中的日期之间,如何连接这两列?,oracle,Oracle,这个问题是对我之前写的一个问题的修改: @戈登林诺夫帮我满意地回答了这个问题 现在,我需要帮助对前面的问题进行调整。对上一个问题的修改是,我在表A中又添加了两行:与Joe Bryant和Jennifer Smith对应的行 因此,我有以下两个表表a和表B: 表A: +-----------------+--------------+---------------+-------------+ | Date | Car | License_Plate |

这个问题是对我之前写的一个问题的修改:

@戈登林诺夫帮我满意地回答了这个问题

现在,我需要帮助对前面的问题进行调整。对上一个问题的修改是,我在表A中又添加了两行:与Joe Bryant和Jennifer Smith对应的行

因此,我有以下两个表表a和表B:

表A:

+-----------------+--------------+---------------+-------------+
|      Date       |     Car      | License_Plate |    Owner    |
+-----------------+--------------+---------------+-------------+
| 1/1/2020 11:51  | Ford F150    | 3892A84       | John Doe    |
| 2/2/2020 12:43  | Ford F150    | 3892A84       | Jane Doe    |
| 3/21/2020 8:14  | Ford F150    | 3892A84       | John Smith  |
| 6/2/2020 13:59  | Ford F150    | 3892A84       | Joe Bryant  |
| 1/1/2019 10:27  | Toyota Camry | 894A839       | Adam Baker  |
| 7/3/2019 13:39  | Toyota Camry | 894A839       | Clark Davis |
| 9/24/2019 16:48 | Toyota Camry | 894A839       | Frank Evans |
| 2/14/2020 19:53 | Toyota Camry | 894A839       | William Johnson |
| 5/22/2020 9:44  | Toyota Camry | 894A839       | Jennifer Smith |
+-----------------+--------------+---------------+-------------+
表B:

+------------------+---------------+-----------------------------+
|       Date       | License_Plate | Maintenance_Service_Mileage |
+------------------+---------------+-----------------------------+
| 1/14/2020 14:07  | 3892A84       | 5000 miles                  |
| 1/30/2020 17:14  | 3892A84       | 10000 miles                 |
| 2/11/2020 11:45  | 3892A84       | 15000 miles                 |
| 2/28/2020 13:36  | 3892A84       | 20000 miles                 |
| 3/4/2020 15:32   | 3892A84       | 25000 miles                 |
| 3/31/2020 10:24  | 3892A84       | 30000 miles                 |
| 4/16/2020 16:01  | 3892A84       | 35000 miles                 |
| 5/18/2020 14:14  | 3892A84       | 40000 miles                 |
| 1/25/2019 13:11  | 894A839       | 5000 miles                  |
| 6/27/2019 12:44  | 894A839       | 10000 miles                 |
| 9/1/2019 16:17   | 894A839       | 15000 miles                 |
| 10/31/2019 8:59  | 894A839       | 20000 miles                 |
| 11/22/2019 10:55 | 894A839       | 25000 miles                 |
| 12/19/2019 15:41 | 894A839       | 30000 miles                 |
| 1/2/2020 14:22   | 894A839       | 35000 miles                 |
| 2/13/2020 17:42  | 894A839       | 40000 miles                 |
| 3/7/2020 9:14    | 894A839       | 45000 miles                 |
| 4/13/2020 9:58   | 894A839       | 50000 miles                 |
+------------------+---------------+-----------------------------+
我想以一种方式将两个表按车牌连接起来,其中表a中的日期和表B中的日期符合以下标准:


表A中的日期请看一下:

with a as (
            select '1/1/2020 11:51' as date_a,  'Ford F150' as car,     '3892A84' as license_plate, 'John Doe' as name from dual
            union
            select '2/2/2020 12:43' as date_a,  'Ford F150' as car,     '3892A84' as license_plate, 'Jane Doe'       from dual
            union
            select '3/21/2020 8:14' as date_a,  'Ford F150' as car,     '3892A84' as license_plate, 'John Smith'     from dual
            union
            select '6/2/2020 13:59' as date_a,  'Ford F150' as car,     '3892A84' as license_plate, 'Joe Bryant'     from dual
            union
            select '1/1/2019 10:27' as date_a,  'Toyota Camry' as car, '894A839' as license_plate, 'Adam Baker'      from dual
            union
            select '7/3/2019 13:39' as date_a,  'Toyota Camry' as car, '894A839' as license_plate, 'Clark Davis'     from dual
            union
            select '9/24/2019 16:48' as date_a, 'Toyota Camry' as car, '894A839' as license_plate, 'Frank Evans'     from dual
            union
            select '2/14/2020 19:53' as date_a, 'Toyota Camry' as car, '894A839' as license_plate, 'William Johnson' from dual
            union
            select '5/22/2020 9:44' as date_a,  'Toyota Camry' as car, '894A839' as license_plate, 'Jennifer Smith'  from dual
                )
        ,b as(
            select '1/14/2020 14:07 ' as date_b,'3892A84' as License_plate, '5000 miles ' as maintence_service_mile from dual union
            select '1/30/2020 17:14 ' as date_b,'3892A84' as License_plate, '10000 miles' as maintence_service_mile from dual union
            select '2/11/2020 11:45 ' as date_b,'3892A84' as License_plate, '15000 miles' as maintence_service_mile from dual union
            select '2/28/2020 13:36 ' as date_b,'3892A84' as License_plate, '20000 miles' as maintence_service_mile from dual union
            select '3/4/2020 15:32  ' as date_b,'3892A84' as License_plate, '25000 miles' as maintence_service_mile from dual union
            select '3/31/2020 10:24 ' as date_b,'3892A84' as License_plate, '30000 miles' as maintence_service_mile from dual union
            select '4/16/2020 16:01 ' as date_b,'3892A84' as License_plate, '35000 miles' as maintence_service_mile from dual union
            select '5/18/2020 14:14 ' as date_b,'3892A84' as License_plate, '40000 miles' as maintence_service_mile from dual union
            select '1/25/2019 13:11 ' as date_b,'894A839' as License_plate, '5000 miles ' as maintence_service_mile from dual union
            select '6/27/2019 12:44 ' as date_b,'894A839' as License_plate, '10000 miles' as maintence_service_mile from dual union
            select '9/1/2019 16:17  ' as date_b,'894A839' as License_plate, '15000 miles' as maintence_service_mile from dual union
            select '10/31/2019 8:59 ' as date_b,'894A839' as License_plate, '20000 miles' as maintence_service_mile from dual union
            select '11/22/2019 10:55' as date_b,'894A839' as License_plate, '25000 miles' as maintence_service_mile from dual union
            select '12/19/2019 15:41' as date_b,'894A839' as License_plate, '30000 miles' as maintence_service_mile from dual union
            select '1/2/2020 14:22  ' as date_b,'894A839' as License_plate, '35000 miles' as maintence_service_mile from dual union
            select '2/13/2020 17:42 ' as date_b,'894A839' as License_plate, '40000 miles' as maintence_service_mile from dual union
            select '3/7/2020 9:14   ' as date_b,'894A839' as License_plate, '45000 miles' as maintence_service_mile from dual union
            select '4/13/2020 9:58  ' as date_b,'894A839' as License_plate, '50000 miles' as maintence_service_mile from dual
        
            )
                SELECT subq.date_a AS OWNER_DATE,subq.CAR AS CAR,NAME AS OWNER,B.date_B AS SERVICE_DATE,B.LICENSE_PLATE,b.maintence_service_mile FROM(
                SELECT LICENSE_PLATE,name,CAR,date_a FROM(
                SELECT LICENSE_PLATE,name,CAR,a.date_a,ROW_NUMBER() OVER (PARTITION BY name,LICENSE_PLATE ORDER BY to_date(a.date_a,'MM/DD/YYYY HH24:MI')) AS R FROM A )
                WHERE R=1) SUBQ
                INNER JOIN B ON b.license_plate = SUBQ.LICENSE_PLATE AND subq.date_a < B.date_B
                ORDER BY CAR,NAME,to_date(date_a,'MM/DD/YYYY HH24:MI'),b.maintence_service_mile;

我仍然认为您的结果表尚未完成,或者您想要应用的标准不够明确。

Hey@KOBER。谢谢你帮我。我注意到您提出的解决方案的结果与我希望的结果不符。请让我知道如何澄清问题,以帮助您更好地理解我试图解决的问题。嘿@Danielle请继续澄清,一旦我向其或任何其他成员发出警告,我们可以更好地帮助您
with a as (
            select '1/1/2020 11:51' as date_a,  'Ford F150' as car,     '3892A84' as license_plate, 'John Doe' as name from dual
            union
            select '2/2/2020 12:43' as date_a,  'Ford F150' as car,     '3892A84' as license_plate, 'Jane Doe'       from dual
            union
            select '3/21/2020 8:14' as date_a,  'Ford F150' as car,     '3892A84' as license_plate, 'John Smith'     from dual
            union
            select '6/2/2020 13:59' as date_a,  'Ford F150' as car,     '3892A84' as license_plate, 'Joe Bryant'     from dual
            union
            select '1/1/2019 10:27' as date_a,  'Toyota Camry' as car, '894A839' as license_plate, 'Adam Baker'      from dual
            union
            select '7/3/2019 13:39' as date_a,  'Toyota Camry' as car, '894A839' as license_plate, 'Clark Davis'     from dual
            union
            select '9/24/2019 16:48' as date_a, 'Toyota Camry' as car, '894A839' as license_plate, 'Frank Evans'     from dual
            union
            select '2/14/2020 19:53' as date_a, 'Toyota Camry' as car, '894A839' as license_plate, 'William Johnson' from dual
            union
            select '5/22/2020 9:44' as date_a,  'Toyota Camry' as car, '894A839' as license_plate, 'Jennifer Smith'  from dual
                )
        ,b as(
            select '1/14/2020 14:07 ' as date_b,'3892A84' as License_plate, '5000 miles ' as maintence_service_mile from dual union
            select '1/30/2020 17:14 ' as date_b,'3892A84' as License_plate, '10000 miles' as maintence_service_mile from dual union
            select '2/11/2020 11:45 ' as date_b,'3892A84' as License_plate, '15000 miles' as maintence_service_mile from dual union
            select '2/28/2020 13:36 ' as date_b,'3892A84' as License_plate, '20000 miles' as maintence_service_mile from dual union
            select '3/4/2020 15:32  ' as date_b,'3892A84' as License_plate, '25000 miles' as maintence_service_mile from dual union
            select '3/31/2020 10:24 ' as date_b,'3892A84' as License_plate, '30000 miles' as maintence_service_mile from dual union
            select '4/16/2020 16:01 ' as date_b,'3892A84' as License_plate, '35000 miles' as maintence_service_mile from dual union
            select '5/18/2020 14:14 ' as date_b,'3892A84' as License_plate, '40000 miles' as maintence_service_mile from dual union
            select '1/25/2019 13:11 ' as date_b,'894A839' as License_plate, '5000 miles ' as maintence_service_mile from dual union
            select '6/27/2019 12:44 ' as date_b,'894A839' as License_plate, '10000 miles' as maintence_service_mile from dual union
            select '9/1/2019 16:17  ' as date_b,'894A839' as License_plate, '15000 miles' as maintence_service_mile from dual union
            select '10/31/2019 8:59 ' as date_b,'894A839' as License_plate, '20000 miles' as maintence_service_mile from dual union
            select '11/22/2019 10:55' as date_b,'894A839' as License_plate, '25000 miles' as maintence_service_mile from dual union
            select '12/19/2019 15:41' as date_b,'894A839' as License_plate, '30000 miles' as maintence_service_mile from dual union
            select '1/2/2020 14:22  ' as date_b,'894A839' as License_plate, '35000 miles' as maintence_service_mile from dual union
            select '2/13/2020 17:42 ' as date_b,'894A839' as License_plate, '40000 miles' as maintence_service_mile from dual union
            select '3/7/2020 9:14   ' as date_b,'894A839' as License_plate, '45000 miles' as maintence_service_mile from dual union
            select '4/13/2020 9:58  ' as date_b,'894A839' as License_plate, '50000 miles' as maintence_service_mile from dual
        
            )
                SELECT subq.date_a AS OWNER_DATE,subq.CAR AS CAR,NAME AS OWNER,B.date_B AS SERVICE_DATE,B.LICENSE_PLATE,b.maintence_service_mile FROM(
                SELECT LICENSE_PLATE,name,CAR,date_a FROM(
                SELECT LICENSE_PLATE,name,CAR,a.date_a,ROW_NUMBER() OVER (PARTITION BY name,LICENSE_PLATE ORDER BY to_date(a.date_a,'MM/DD/YYYY HH24:MI')) AS R FROM A )
                WHERE R=1) SUBQ
                INNER JOIN B ON b.license_plate = SUBQ.LICENSE_PLATE AND subq.date_a < B.date_B
                ORDER BY CAR,NAME,to_date(date_a,'MM/DD/YYYY HH24:MI'),b.maintence_service_mile;