2014-02-16 4 views
2

나는 데이터베이스 쿼리를 작성하려고 노력하고 있으며, 실제로 작동하도록하는 것뿐만 아니라 비슷한 쿼리를 찾기 위해 고심하고 있습니다. . 나는 안드로이드 개발에서 SQLite를 처음 사용했다.각 ID의 첫 번째 행과 마지막 행의 값을 포함하는 SELECT

다음은 내가하려는 일입니다. GPS 위치를 기록하는 테이블이 있습니다. 각 행에는 pointId, routeId, latitude, longitude 및 datetime이 있습니다.

내 결과 집합의 각 행에는 지금있는 각 routeId에 대한 첫 번째 및 마지막 레코드의 datetime이 포함되어야하지만 첫 번째 및 마지막 레코드의 위도와 경도도 포함해야합니다. 내가 조인과 서브 쿼리로 여러 버전을 제거한 후, 지금까지있어 여기 어디에

이 작동하지 않았다이다 : http://www.sqlfiddle.com/#!7/47012/69

I가에 도착하고 싶은 무엇 (값이 실제되지 않습니다주의) :

routeid minDatetime   maxDatetime   firstLat firstLong lastLat lastLong 
54  2014-02-16 12:01:00 2014-02-16 12:06:00 0.0004 1.345  0.0007 1.349 
55  2014-02-16 12:07:00 2014-02-16 12:07:00 0.0011 1.388  0.0011 1.388 

이 정보가 도움이되기를 바랍니다. 어떤 도움을 주셔서 감사합니다.

답변

1

당신은 ORDER BY을 활용할 수 LIMIT

SELECT * FROM <yourtable> WHERE routeid = '54' ORDER BY dateTime DESC LIMIT 1 

은 처음과를 얻을;

SELECT * FROM <yourtable> WHERE routeid = '54' ORDER BY dateTime ASC LIMIT 1 

마지막으로 가져 오려면.

로직. 관심있는 ID와 일치하는 행을 선택하고, dateTime을 사용하여 내림차순 또는 오름차순으로 정렬 한 다음 첫 번째 행을 반환하십시오.

+0

내가 이상적으로 원하는 것은 데이터베이스에 여러 번 돌아가는 것보다는 하나의 쿼리에 기록 된 모든 데이터를 가져 오는 것입니다. 나는 거의 거기에있다. 하나 이상의 routeId가있을 때 모든 레코드를 제외하고 조인하지 않고 첫 번째와 마지막 행 값을 알아낼 수 없다. 내가 루트 아이디와 관계를 맺을 수 없어 서브 쿼리를 해결할 수 없다. –

1

내 제한된 테스트 레코드를 실행하는 것으로부터 내 결과를 반환하는 작동 쿼리를 얻을 수있었습니다.하지만이 테스트를 내 앱에 적용 할 때까지는 100 % 확신 할 수 없습니다. 의심의 여지가에 따라 개선 될 수

http://www.sqlfiddle.com/#!7/47012/147

내 쿼리는 :

select 
a.routeId, 
min(a.datetime), 
max(a.datetime), 
(select latitude from GPSPointLog b 
    WHERE b.routeId = a.routeId ORDER BY datetime LIMIT 1) 'firstLat', 
(select longitude from GPSPointLog c 
    WHERE c.routeId = a.routeId ORDER BY datetime LIMIT 1) 'firstLong', 
(select latitude from GPSPointLog d 
    WHERE d.routeId = a.routeId ORDER BY datetime DESC LIMIT 1) 'lastLat', 
(select longitude from GPSPointLog e 
    WHERE e.routeId = a.routeId ORDER BY datetime DESC LIMIT 1) 'lastLong' 
from GPSPointLog a 
GROUP BY a.routeId 
order by a.routeId 

나는 내가 가입 경로를 추락 잘못 알고 있었다.

관련 문제