Вы знаете, я, наверное, странноватый человек :-), но сделал в итоге вообще не так:
////////
$result = pg_query($conn,"select name,model,inventory_code,s_n,device_type_code from public.main where device_type_code=1 order by main.s_n");
if (!$result) {
echo "An error occurred.\n";
exit;
}
echo "
Название |
Модель |
Инвентарный номер |
Поступил |
Число перемещений |
";
while ($row = pg_fetch_row($result)) {
$serial_number = $row[3]; //записываем значение серийного номера в переменную $serial_number
//и создаем вложенный запрос, в котором по каждому ноутбуку (по серийному номеру)
//будем извлекать историю перемещений
$result2 = pg_query($conn,"select main.s_n, employers.employer, history.date from main inner join (employers inner join history on employers.employer_code = history.device_code where s_n='$serial_number' order by history.date");>
//полученные результаты сортируем по дате и подбираем самую свежую дату
$count=0; //счетчик перемещений по каждому ноутбуку
while ($row2 = pg_fetch_row($result2)) { //идем по выборке
$last_date = $row2[2]; //собираем дату
$last_owner = $row2[1]; //и владельца; последняя такая строка и будет последним владельцем ноутбука
$count=$count+1; //считаем число перемещений устройства
}
$discount=$count-2; //спускаемся до предшественника
//теперь смотрим нахождение ноутбука по последней дате - если это был Склад, то выводим в таблицу, если нет - пропускаем
if ($last_owner == "Склад") {
if($count=='1') {
$owner_prev="Не было перемещений";
}
else {
$row_prev = pg_fetch_row($result2,$discount);
$owner_prev = $row_prev[1];
}
echo "
$row[0] |
$row[1] |
$row[2] |
$last_date |
$count |
$owner_prev |
";
}
}
///////
И это работает - для контроля вывел еще один столбец (временно) с числом перемещений по каждой позиции. Предложенные варианты с DESC LIMIT2 не помогли, надо сказать.