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