2013-03-13 1 views
1

고유 한 레코드를 선택하고 동시에 데이터베이스에서 최대 또는 오히려 최신 날짜를 비교하려면 SQL 문이 필요합니다. 이것은 내 테이블 fleetschedule.It fleetschedule id, companyid, route가 포함되어 있습니다 fleetnumber, traveldate. 내가 시도한 SQL 쿼리 :고유 값 및 최대 값을 식별 할 수있는 SQL 쿼리

SELECT DISTINCT fleetnumber and max(traveldate), routeid, companyid, traveldate 
FROM fleetSchedule 

문제는 단지 하나의 값 (최대 값)을 제공합니다. 나는 최대/최신 날짜에 여행 한 모든 명백한 버스 (fleetnumbers에 의해 확인되는)를 요구한다.

테이블의
fleetnumber routeid companyid traveldate 
MSH-17E  RT17 MSH   2009-07-26 
FDH-17D  RT17 FDH   2009-07-26 
MSH-17F  RT17 MSH   2009-07-25 
MSH-27E  RT27 MSH   2009-08-24 

샘플을 사용하고 있습니다 : 난 결과의 샘플 데이터를 찾고 있어요

fleetScheduleID companyID routeID  travelDate fleetNumber 
20     MSH  RT17  2009-07-26  MSH-17E  
19     MSH  RT17  2009-07-26  MSH-17D 
18     MSH  RT27  2009-08-24  MSH-27E 

답변

1
SELECT fleetNumber, 
     MAX(travelDate) AS travelDate, 
     SUBSTRING_INDEX(GROUP_CONCAT(routeID ORDER BY travelDate DESC), ',', 1) AS routeID, 
     SUBSTRING_INDEX(GROUP_CONCAT(companyID ORDER BY travelDate DESC), ',', 1) AS companyID 
FROM fleetSchedule 
GROUP BY fleetNumber; 
+0

젠장, 너 너무 능숙 해! 잘됐다 미카 일! – GotaloveCode

+0

올해를 연말로 제한하고 싶다면 어떻게해야합니까? – GotaloveCode

+0

@ user2083526'GROUP BY' 전에'where WHERE travelDate < '2014-01-01''을 추가하십시오. –

0
select fleetnumber, routeid, companyid, max(traveldate) 
from fleetSchedule 
group by fleetnumber, routeid, companyid 

이 명확하게하기 위해, 위에서 당신에게 각각 별개의 버스와 최신 날짜를 줄 것이다 그것은 여행했다.

select distinct fleetnumber, routeid, companyid 
from fleetSchedule 
where traveldate = (select max(traveldate) from fleetSchedule) 
+0

1의 값을 얻을 것으로 보인다 나는 요구한다. 그러나 그들은 Mikhail이 위에있는 1s와 다르다. 나를 비교하고 어느 것이 가장 잘 작동하는지 보자 .2 번째가 하나의 값을 준다. – GotaloveCode

1

를 다음을 사용하면 전체 테이블을 가로 질러 최신 날짜에 여행을 별개의 버스의 목록이 아니라한다면이 시도 :

select * 
from fleetSchedule 
where travelDate = (select max(travelDate) from fleetSchedule) 
+0

피터는 더 나은 개선처럼 보이지만, 그것은 나에게 단 하나의 최대 함대를 준다. 1. 질문을 편집 한 후 내 뜻을 알 수 있습니다. – GotaloveCode

+0

편집이 끝나면 알려주세요 –