2011-03-25 5 views
3

에 다음 스크린 샷을 반환MySQL의 쿼리 ... 나는 다음과 같은 쿼리가 서로

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

을 중복하지만 인접를 제거 할 수 있습니다. results

그러나 예를 들어 BCS6515는 목록에 나중에 많이 표시되며이 목록에서 서로 나란히있는 행을 "압축"하고자합니다.

(그들은 첫 번째 질의에 인접하지 않았다으로이 목록에 두 번 노트 BCS6515) 출력의 예 flightno BY 그룹이 작동하지 않습니다 이유 enter image description here

.

답변

2

내가 당신을 도울 수있는 열없이 SQL에서 그렇게 할 수있는 좋은 방법이 생각하지 않습니다. 기껏해야, 추악하고 비효율적 인 하위 쿼리가 필요할 것이라고 생각합니다. 아마도 더 나은 성능으로 끝날 수있는 두 가지 옵션이 있습니다.

로직을 직접 정리하여 결과를 정리하는 것이 좋습니다. (추가 :) 데이터베이스 서버 측에서 처리하려는 경우 select 문의 procedure clause을 사용하여이 작업을 수행 할 수 있습니다.

또 다른 정보는 테이블에있는 다른 정보를 사용하거나이 목적으로 테이블에 새 정보를 추가하는 것입니다. 현재 테이블에 여러 개의 BCS6515 행 인스턴스마다 다른 값이 있습니까?

아니요, 테이블의 데이터에 대한 정확한 가정을한다면 하루에 같은 번호의 항공편이 하나만있을 것입니다.하지만 항공편 번호는 같은 시작/끝 및 다른 날에 시간. (예 : NRT에서 DTW까지의 10a.m은 매일 같은 항공편 번호 임). timestamp이 항상 같은 날인 경우 GROUP BYDAY(timestamp)을 사용할 수 있습니다. 그러나 이것은 야간 비행을 허용하지 않습니다. 따라서 모든 행을 동일한 실제 항공편에 속한 것으로 식별하기 위해 그룹화 할 출발일과 같은 것이 필요할 것입니다.

+0

귀하의 게시물을 읽은 후 비슷한 생각을하고 더 나은 데이터 구조를 만들었으므로이 문제는 처음부터 일어날 수 없습니다! –

+1

그건 분명히 갈 수있는 좋은 방법입니다^_^ – jswolf19

+0

그래, 훨씬 나아 졌어! –

0

'timestamp'값이 2 개의 BCS6515 레코드에서 다르기 때문에 GROUP BY가 작동하지 않습니다.

그것은 작동하는 경우에만 :

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

추가 된 출력 예제 –

+0

모든 flightno를 함께 그룹화하므로 원하는 효과가 없습니다! 나는 단지 인접한 것들이 그룹화되도록 그것을 필요로한다. –

관련 문제