ACCESS SQL:子类别的TOP 1(或MAX())

时间:2011-06-27 15:00:30

标签: sql ms-access ms-access-2010

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

这是我的表:航班(AC,小时,周期,flight_date)
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&lt; = ask_date(看起来根本没有考虑MAX)。

我考虑过将TOP 1与子查询一起使用,但却找不到如何操作 我正在使用max(周期),因为如果周期长度<1。 1h,我们可以获得相同小时的记录,但根据定义,周期仍然不同。

我错过了什么?

2 个答案:

答案 0 :(得分:4)

您还需要将max也放在小时栏附近,并且只能通过ac:

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

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

答案 1 :(得分:1)

从以下选项中删除select和group中的小时数:

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