SQL ДОСТУПА: ТОП 1 подкатегории (или MAX ()) - PullRequest
0 голосов
/ 27 июня 2011

Если вопрос не кажется очень ясным, это должно быть после этого объяснения!

Вот моя таблица: Полеты (AC, часы, циклы, дата полета)
ac = aicraft
часы = общее количество часов самолета
циклов = общее количество циклов самолета (цикл = полет) flight_date = самоочевидно :)

Я пытаюсь написать запрос, который даст мне количество часов / циклов всех ACдостигли определенной даты.
(имейте в виду, что самолеты могут совершать несколько рейсов в день или вообще не выполнять никаких рейсов)

Вот что я написал:

SELECT ac, hours, max(cycles)
FROM flights
WHERE flight_date <= cdate(asked_date)  //so access asks me for the date when I run the query
GROUP BY ac, hours

но по какой-то причине это не работает:

Возвращает все рейсы со всех самолетов, где flight_date <= ask_date (похоже, что MAX вообще не учитывается).</p>

Я рассмотрел использование TOP 1 с подзапросом, но не смог найти, как это сделать.
Я использую max (циклы), так как если длина цикла <1h, мы можем получить записи сте же часы, но по определению циклы будут другими. </p>

Чего мне не хватает?

Ответы [ 2 ]

4 голосов
/ 27 июня 2011

Вам нужно также указать max вокруг столбца часов и группы только по ac:

SELECT ac, max(hours), max(cycles)
FROM flights
WHERE flight_date <= cdate(asked_date)
GROUP BY ac

Причина:
Так как столбец часов содержит общее количество часов самолета, группировка по этому значению вернет вам (почти) все строки, потому что значение отличается в каждой строке. Он будет группировать только те строки, которые имеют одинаковое значение общего количества часов для конкретного самолета.

1 голос
/ 27 июня 2011

Удалите часы из выбора и из группы по:

SELECT ac, max(cycles) 
FROM flights 
WHERE flight_date <= cdate(asked_date)   
GROUP BY ac

, если вам действительно нужны совпадающие часы цикла, тогда:

SELECT x.ac, x.cycles, hours
FROM flights 
inner join 
(SELECT ac, max(cycles) as cycles
FROM flights 
WHERE flight_date <= cdate(asked_date)  
GROUP BY ac) x 
on x.ac=flights.ac and x.cycles=flights.cycles 
...