1

2 つのテーブルがあり、1 つはすべてのドライバーの詳細を含むドライバーで、テーブルは dTraining です。

ドライバーの構造は

CREATE TABLE IF NOT EXISTS `driver` (
  `driverID` int(5) NOT NULL,
  `clientID` int(5) NOT NULL,
  `driverName` varchar(100) NOT NULL,
  `driverDateOfBirth` date NOT NULL,  
  `driverStatus` enum('a','d','i') NOT NULL DEFAULT 'a'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

dTrainingの構造は

CREATE TABLE IF NOT EXISTS `dTraining` (
  `dTrainingID` int(5) NOT NULL,
  `cTrainingID` int(5) NOT NULL,
  `trainingID` int(11) NOT NULL,
  `driverID` int(5) NOT NULL,
  `clientID` int(5) NOT NULL,
  `driverTrainingDate` date NOT NULL,
  `driverTrainingUpdateStatus` enum('d','a') NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

私が必要とするのは、このようなクエリを実行すると、ドライバーが持っている多くのトレーニング データから最新のトレーニングが得られることです。そのため、そこでサブクエリを実行する方法について助けが必要です。

SELECT driver.driverID,dTraining.driverTrainingDate
 FROM   driver,dTraining

現在、私はこのクエリを持っています。サンプル出力は

driverID=1 , driverTrainingDate=2013-02-01
driverID=2 , driverTrainingDate=2013-02-02

SELECT driver.driverID,b.driverTrainingDate
 FROM   driver
             LEFT JOIN (
  SELECT B1.*
                      FROM   dTraining AS B1
                             LEFT JOIN  dTraining AS B2
                                    ON B1.driverID = B2.driverID
                                       AND B1.cTrainingID = B2.cTrainingID 
                                       AND B1.driverTrainingDate< B2.driverTrainingDate
                      WHERE B1.cTrainingID =".$cTID." And B2.driverID IS NULL) as b
ON ( driver.driverID= b.driverID)

B1.driverTrainingDate< B2.driverTrainingDate ではなく B1.driverTrainingDate> B2.driverTrainingDate を配置する必要があるのはなぜですか? B2.driverID IS NULL の必要性

4

2 に答える 2

1

B2 との左結合は、B1 のこれらの後に発生したトレーニングを返します。そのため、何も存在しない場合 ( B2.driverID is null)、B1 のトレーニングが最後のものであることが確実です。

于 2013-02-14T18:35:55.237 に答える
1

'123'これを試して、driverIDを変更してください:

select d.*,t.* 
from driver as d
inner join dtraining as t
on d.driverId=t.driverId
where d.driverid in (1,2,3,4.......10000)
order by t.driverTrainingDate desc
limit 1
于 2013-02-14T21:01:39.070 に答える