2011-03-25 26 views
3

我有以下查詢..MySQL查詢消除重複,但只有彼此相鄰

SELECT Flights.flightno, 
    Flights.timestamp, 
    Flights.route 
FROM Flights 
WHERE Flights.adshex = '400662' 
ORDER BY Flights.timestamp DESC 

它返回下面的截圖。 results

但是我不能使用一個簡單的組,例如BCS6515將在列表中出現很多,我只想「壓縮」在這個列表中彼此相鄰的行。

輸出(注BCS6515兩次在此列表中,因爲他們沒有在第一個查詢相鄰)的一個例子 enter image description here

這就是爲什麼一個GROUP BY flightno將無法正常工作。

回答

2

我不認爲有一個在SQL這樣做沒有列來幫助你的好方法。充其量,我認爲這將需要一個醜陋而低效的子查詢。你有兩個選擇可能會獲得更好的性能。

你可以自己編寫邏輯來修剪結果。 (增加:)如果要在數據庫服務器端處理它,可以使用select語句的procedure clause完成此操作。

另一種方法是使用表中的其他信息或爲此目的向表中添加新信息。你目前在你的表中有什麼東西對於許多BCS6515行的每個實例都是不同的值?

如果不是,並且如果我對錶格中的數據做出正確的假設,那麼每天將只有一個具有相同編號的航班,儘管航班號被重複用於表示具有相同啓動/結束和其他日子的時間。 (例如,從NRT到DTW的每天10a.m.是相同的航班號)。如果timestamp總是同一天,那麼您可以在GROUP BY中使用DAY(timestamp)。但是,這不允許過夜航班。因此,您可能需要諸如出發日期之類的東西來分組,以將所有行標識爲屬於同一實際航班。

+0

在閱讀您的文章後,我有一些類似的想法,並更好地構建數據,以便這個問題甚至不可能發生在第一位! – 2011-03-25 03:08:17

+1

這絕對是更好的方法去^ _^ – jswolf19 2011-03-25 03:10:47

+0

是的,做得更好! – 2011-03-28 08:36:49

0

GROUP BY不起作用,因爲2個BCS6515記錄的'時間戳'值不同。

它會工作,僅當:

SELECT Flights.flightno, 
    Flights.route 
FROM Flights 
WHERE Flights.adshex = '400662' 
GROUP BY (Flights.flightno) 
+0

添加示例輸出 – 2011-03-25 01:15:48

+0

由於它將所有flightno分組在一起,因此沒有達到預期效果!我需要它,所以只有相鄰的人分組。 – 2011-03-25 02:19:50