如果问题看起来不是很清楚,那应该是在解释之后!
这是我的表:航班(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,我们可以获得相同小时的记录,但根据定义,周期仍然不同。
我错过了什么?
答案 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