我有以下查询..
SELECT Flights.flightno,
Flights.timestamp,
Flights.route
FROM Flights
WHERE Flights.adshex = '400662'
ORDER BY Flights.timestamp DESC
返回以下屏幕截图。
但是我不能使用一个简单的组,例如BCS6515将在列表中稍后出现,我只想“压缩”此列表中彼此相邻的行。
输出示例(注意BCS6515在此列表中两次,因为它们在第一个查询中不相邻)
这就是GROUP BY flightno无法使用的原因。
答案 0 :(得分:2)
我认为在SQL中没有一个很好的方法可以帮助你。充其量,我认为它需要一个丑陋且效率低下的子查询。你有两个选择可能最终会有更好的表现。
一种方法是自己编写逻辑来修剪结果。 (已添加:) 如果您想在数据库服务器端处理它,可以使用procedure clause的select语句来完成。
另一种方法是使用表中的其他信息或为此目的向表中添加新信息。您目前在表中是否有针对多个BCS6515行的每个实例的不同值的内容?
如果没有,如果我对您的表格中的数据做出正确的假设,那么每天只有一个航班号码相同,但航班号重复用于表示具有相同开始/结束的航班和其他日子的时间。 (例如,从NRT到DTW的上午10点是每天相同的航班号)。如果timestamp
始终是同一天,那么您可以在DAY(timestamp)
中使用GROUP BY
。但是,这不允许通宵飞行。因此,您可能需要诸如出发日期之类的东西来分组,以将所有行标识为属于同一物理航班。
答案 1 :(得分:0)
GROUP BY不起作用,因为2个BCS6515记录的'timestamp'值不同。
仅在以下情况下才有效:
SELECT Flights.flightno,
Flights.route
FROM Flights
WHERE Flights.adshex = '400662'
GROUP BY (Flights.flightno)