На самом деле вы должны сначала попытаться создать представление, которое сделает этот единственный объект таблицы, чтобы отобразить пакет в одной строке.
Учитывая структуру таблицы быть что-то вроде этого
CREATE TABLE `packageList` (
`cityId` int(10) NOT NULL,
`packageId` int(10) NOT NULL,
`status` varchar(256) NOT NULL,
`changedate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
поэтому ваше мнение shoult быть создан на основе следующего запроса
CREATE VIEW packageStatus AS
SELECT
pl1.cityId as cityId ,
pl1.packageId as packageId ,
pl1.changeDate as DropTIme,
pl2.changeDate as Picktime
FROM
`packageList` pl1 , `packageList` pl2
WHERE
pl1.status = "Droped" AND pl2.status = "Picked"
and pl1.packageId = pl2.packageId
После этого он собирается быть простой запрос группы по на этой точке зрения только некоторые вещи, как ниже запроса
SELECT
tt.cityid,avg(DATEDIFF(tt.DropTIme,tt.Picktime))
FROM
(SELECT
pl1.cityId as cityId ,
pl1.packageId as packageId ,
pl1.changeDate as DropTIme,
pl2.changeDate as Picktime
FROM
`packageList` pl1 , `packageList` pl2
WHERE
pl1.status = "Droped" AND pl2.status = "Picked"
and pl1.packageId = pl2.packageId) as tmpTable tt Group BY cityId
Ответ Использование только запроса с вне создавая вид будет Soome вещь, как следующим
SELECT
cityid,avg(DATEDIFF(DropTIme,Picktime))
FROM
(SELECT
pl1.cityId as cityId ,
pl1.packageId as packageId ,
pl1.changeDate as DropTIme,
pl2.changeDate as Picktime
FROM
packageList
pl1 , packageList
pl2
WHERE
pl1.status = "Droped" AND pl2.status = "Picked"
and pl1.packageId = pl2.packageId) as tmpTable
Group BY cityId
Какая СУБД вы используете? –
Какой тип столбца 'Change_Date'? –
Я использую Oracle DB –