我正在尝试提出一个数据库查询,我真的很挣扎,不仅要让它工作,而且要找到一个类似的查询,我可以根据它。我在Android开发中对SQLite很陌生。
这就是我想要做的。我有一张桌子,我正在记录GPS位置。每行都有一个pointId,routeId,纬度,经度和日期时间。
我的结果集中的每一行都需要包含每个routeId的第一个和最后一个记录的日期时间,我现在已经获得了该记录,但我还需要包含第一个和最后一个记录的纬度和经度。
这是我到目前为止所处的位置,删除了多个版本的连接和子查询无法正常工作:http://www.sqlfiddle.com/#!7/47012/69(注意值不是真的)
我想要的是:
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
我希望这是有道理的。任何帮助表示赞赏。
答案 0 :(得分: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与您感兴趣的id匹配的行,按dateTime按降序或升序排序,然后返回第一行。
答案 1 :(得分: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
我知道沿着JOIN路线走错了。