Re: SQL statement help please
From: Tokunaga T. <tonkuma_at_jp.ibm.com>
Date: 2 Aug 2003 19:19:33 -0700
Message-ID: <8156d9ae.0308021819.48a665c0_at_posting.google.com>
This worked in DB2 UDB.
CREATE TABLE Vehicles
(VehicleID SMALLINT NOT NULL
,Time TIME NOT NULL
,Station CHAR(8) NOT NULL
);
,(1 , '10:10:00' , 'E')
AND
ORDER BY 1, 2
;
Date: 2 Aug 2003 19:19:33 -0700
Message-ID: <8156d9ae.0308021819.48a665c0_at_posting.google.com>
> > I am using MySQL so could you guru give me any idea of the ANSI SQL rather > than MS SQL Server specific, thanks !
This worked in DB2 UDB.
CREATE TABLE Vehicles
(VehicleID SMALLINT NOT NULL
,Time TIME NOT NULL
,Station CHAR(8) NOT NULL
);
INSERT INTO Vehicles
VALUES
(1 , '09:00:00' , 'A'),(1 , '10:00:00' , 'D')
,(1 , '09:10:00' , 'B')
,(1 , '09:20:00' , 'C')
,(1 , '09:30:00' , 'A')
,(1 , '09:40:00' , 'B')
,(1 , '09:50:00' , 'C')
,(1 , '10:10:00' , 'E')
,(2 , '09:10:00' , 'A')
,(2 , '09:20:00' , 'B')
,(2 , '09:40:00' , 'C')
,(2 , '09:50:00' , 'D')
,(2 , '10:10:00' , 'A')
,(2 , '10:20:00' , 'B')
,(2 , '10:30:00' , 'A')
,(2 , '10:40:00' , 'B')
,(2 , '10:50:00' , 'C')
,(2 , '11:00:00' , 'D')
,(2 , '12:10:00' , 'E')
;
SELECT A.VehicleID
, SUBSTR(CHAR(A.Time), 1, 5) A , SUBSTR(CHAR(B.Time), 1, 5) B , SUBSTR(CHAR(C.Time), 1, 5) C , SUBSTR(CHAR(D.Time), 1, 5) D , SUBSTR(CHAR(E.Time), 1, 5) E FROM Vehicles A LEFT OUTER JOIN Vehicles A2 ON A2.Station = 'A' AND A2.VehicleID = A.VehicleID AND A2.Time > A.Time LEFT OUTER JOIN Vehicles B ON B .Station = 'B' AND B .VehicleID = A.VehicleID AND B.Time > A.Time AND (B.Time < A2.Time OR A2.Time IS NULL) LEFT OUTER JOIN Vehicles C ON C .Station = 'C' AND C .VehicleID = A.VehicleID AND C.Time > A.Time AND (C.Time < A2.Time OR A2.Time IS NULL) LEFT OUTER JOIN Vehicles D ON D .Station = 'D' AND D .VehicleID = A.VehicleID AND D.Time > A.Time AND (D.Time < A2.Time OR A2.Time IS NULL) LEFT OUTER JOIN Vehicles E ON E .Station = 'E' AND E .VehicleID = A.VehicleID AND E.Time > A.Time AND (E.Time < A2.Time OR A2.Time IS NULL)WHERE A .Station = 'A'
AND
( A2.Time = (SELECT MIN(Time) FROM Vehicles Am WHERE Am.Station = 'A' AND Am.VehicleID = A.VehicleID AND Am.Time > A.Time ) OR A2.Time IS NULL )
ORDER BY 1, 2
;
VEHICLEID A B C D E --------- ----- ----- ----- ----- -----
1 09:00 09:10 09:20 - - 1 09:30 09:40 09:50 10:00 10:10 2 09:10 09:20 09:40 09:50 - 2 10:10 10:20 - - - 2 10:30 10:40 10:50 11:00 12:10
5 record(s) selected. Received on Sun Aug 03 2003 - 04:19:33 CEST