0

如果问题看起来不是很清楚,应该在这个解释之后!

这是我的表格:航班(AC,小时,周期,flight_date)
ac =
飞机小时 = 总飞机小时
周期 = 总飞机周期(周期 = 航班) 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)。

我考虑过将 TOP 1 与子查询一起使用,但找不到怎么做。
我正在使用 max(cycles),因为如果循环长度 < 1h,我们可以获得相同小时数的记录,但根据定义,循环仍然会有所不同。

我错过了什么?

4

2 回答 2

4

您还需要将 max 放在 hours 列周围并仅按 ac 分组:

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

原因:
由于 hours 列包含飞机的总小时数,按此值分组,将返回(几乎)所有行,因为每行的值不同。它只会对特定飞机的总小时数相同的行进行分组。

于 2011-06-27T15:03:45.963 回答
1

从 select 和 group by 中删除小时数:

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 
于 2011-06-27T15:07:21.950 回答