1

passenger_log4 つの列psngr_id(必ずしも一意である必要はありません)、arrival_dt_tmdeparture_dt_tmおよびtimediff(乗客の最後の出発日と次の到着日の差)を持つテーブルがあります。

このテーブルから、時差が 24 時間未満の行のみを選択し、次の行も選択できるようにしたいと考えています。

私はSQL 2008を使用しているため、最新のバージョンLEADLAG機能を実際に使用できません。

既存のテーブル -

local_passenger_id arrival_date_time departure_date_time timediff
-----------------------------------------------------------------

00F9P0L193  28/07/2013 23:30    28/07/2013 23:36    0.516666
00F9P0L193  29/07/2013 00:07    29/07/2013 03:16    NULL
01MLEMFDUK  12/10/2008 16:43    12/10/2008 20:28    21.116666
01MLEMFDUK  13/10/2008 17:35    13/10/2008 20:19    3889.9
01MLEMFDUK  24/03/2009 22:13    25/03/2009 01:23    32268
01MLEMFDUK  28/11/2012 13:23    28/11/2012 14:10    676.583333
01MLEMFDUK  26/12/2012 18:45    26/12/2012 19:27    20.433333
01MLEMFDUK  27/12/2012 15:53    27/12/2012 17:07    289.2
01MLEMFDUK  08/01/2013 18:19    08/01/2013 19:00    NULL
02CJHH6KAJ  27/02/2011 09:48    27/02/2011 11:56    10167.25
02CJHH6KAJ  26/04/2012 03:11    26/04/2012 06:42    44.566666
02CJHH6KAJ  28/04/2012 03:16    28/04/2012 07:06    23.233333
02CJHH6KAJ  29/04/2012 06:20    29/04/2012 09:45    NULL

望ましい出力 -

local_passenger_id arrival_date_time departure_date_time timediff_mins
----------------------------------------------------------------------

00F9P0L193  28/07/2013 23:30    28/07/2013 23:36    0.516666
00F9P0L193  29/07/2013 00:07    29/07/2013 03:16    NULL
01MLEMFDUK  12/10/2008 16:43    12/10/2008 20:28    21.116666
01MLEMFDUK  13/10/2008 17:35    13/10/2008 20:19    3889.9
01MLEMFDUK  26/12/2012 18:45    26/12/2012 19:27    20.433333
01MLEMFDUK  27/12/2012 15:53    27/12/2012 17:07    289.2
02CJHH6KAJ  28/04/2012 03:16    28/04/2012 07:06    23.233333
02CJHH6KAJ  29/04/2012 06:20    29/04/2012 09:45    NULL
4

2 に答える 2

0
SELECT T.local_passenger_id, T.arrival_date_time, T.departure_date_time, T.timediff FROM passenger_log T
WHERE T.timediff < 24
UNION
SELECT T2.local_passenger_id, T2.arrival_date_time, T2.departure_date_time, T2.timediff FROM 
(SELECT *, RANK() OVER (PARTITION BY local_passenger_id ORDER BY arrival_date_time) AS Ranked FROM passenger_log) T1
LEFT JOIN 
(SELECT *, RANK() OVER (PARTITION BY local_passenger_id ORDER BY arrival_date_time) AS Ranked FROM passenger_log) T2
ON T1.local_passenger_id = T2.local_passenger_id AND T1.Ranked + 1 = T2.Ranked
WHERE T1.timediff < 24

ORDER BY local_passenger_id, arrival_date_time
于 2013-09-17T15:41:06.677 に答える