(我不会说英语很好,但我会尽力而为)
我有两张桌子。
表格1
身份证用户 --------------------- 1 | A001 | 用户1 2 | A002 | 用户1 3 | A003 | 用户2 4 | A002 | 用户3
表2
id carid 日期时间 lat lon -------------------------------------------------- -- 1 | A001 | 2013-25-06 10:00:00 | -23.0000 | -46.0000 2 | A002 | 2013-25-06 10:01:00 | -24.3500 | -45.3200 3 | A002 | 2013-25-06 10:02:00 | -24.3800 | -45.3300 4 | A001 | 2013-25-06 10:05:00 | -23.0500 | -46.1000 5 | A003 | 2013-25-06 10:07:00 | -24.3500 | -45.3200 6 | A001 | 2013-25-06 10:10:00 | -23.0700 | -46.1200
我需要从按日期时间排序的“user1”中选择每个不同的注册表“carid”
结果我需要:
carid 日期时间 lat lon -------------------------------------------------- A001 | 2013-25-06 10:10:00 | -23.0700 |-46.1200 A002 | 2013-25-06 10:02:00 | -24.3800 |-45.3300
我实际制作的方式是从我想要的用户那里选择所有“carid”,然后通过.net 单独选择每一行。
`SELECT carid FROM table1 where user = “user1”;`
心 ----- A001 A002
然后选择我想要的行:
SELECT * FROM table2 WHERE car_id='A001' ORDER BY datetime DESC limit 1
SELECT * FROM table2 WHERE car_id='A002' ORDER BY datetime DESC limit 1
但是根据该用户的注册表“carid”的数量,我必须做很多查询。我不知道是否可以通过一个 SELECT 改进我正在做的方式来做到这一点,但这就是我尝试过的:
SELECT car_id, datetime, lat, lon from table1
INNER JOIN table2 on carid = car_id
WHERE user = 'user1'
GROUP BY carid
ORDER BY datetime DESC;
结果:
carid 日期时间 lat lon -------------------------------------------------- ---- A002 | 2013-25-06 10:01:00 | -24.3500 | -45.3200 A001 | 2013-25-06 10:02:00 | -23.0000 | -46.0000
我也试过这个:
SELECT car_id, MAX(datetime) as datetime, lat, lon from table1
INNER JOIN table2 on carid = car_id
WHERE user = 'user1'
GROUP BY carid
ORDER BY datetime DESC;
结果:
carid 日期时间 lat lon -------------------------------------------------- ---- A001 | 2013-25-06 10:10:00 | -23.0000 | -46.0000 A002 | 2013-25-06 10:02:00 | -24.3500 | -45.3200
但是我得到的结果是错误的。如果不选择所有行,我不知道该怎么办,这比我真正制作的方式要慢。
有什么想法吗?