我有一个表(LocationEntries),它包含了我的应用程序收到某些设备位置的时间(timeReceived)。上述设备具有唯一的subscriberId。 第二个表包含这些subscriberIds和每个设备的实际Id。
我想识别发送位置更新不到10秒的设备。 查询类似于下面的查询:
SELECT LocationEntries.subscriberId, LocationEntries.timeReceived, Subscriber.id,
Subscriber.suid
FROM LocationEntries
LEFT JOIN LocationEntries ON (LocationEntries.timeReceived - LocationEntries.timeReceived =< 10 )
LEFT JOIN Subscriber ON (Subscriber.id = subscriberId)
GROUP BY Subscriber.id
但是我不确定是否可以对表进行LEFT JOIN,因为我每次尝试 Not unique table / akias:&#39; LocationEntries&#39; 错误执行命令 我做错了什么?
修改
我设法找到了有效的查询。
SELECT suid
FROM Subscribers s
LEFT JOIN LocationEntries l1 ON (s.id = l1.subscriberId)
LEFT JOIN LocationEntries l2 ON (s.id = l2.subscriberId)
WHERE l1.timeReceived < l2.timeReceived AND TIMEDIFF(l2.timeReceived, l1.timeReceived) <= '00:00:10.0'
GROUP BY s.id
但是,由于表格中的企业数量(接近4,000,000)太多,因此查询无法及时提供结果。
答案 0 :(得分:0)
是的,你可以在同一个表之间进行连接,只需要输入别名...... 但是,我不太确定这是否是你需要的......
也许这可行:
select LE.subscriberId, LE.timeReceived, SU.id, SU.suid
FROM LocationEntries LE
LEFT JOIN Subscriber SU
ON SU.id = LE.subscriberId
WHERE LE.timeReceived =< 10
group by Subscriber.id;
对同一个表进行连接的想法是,例如,您有一个值在一列中的记录,并且您希望获得具有相同值但在另一列中的另一个记录/行