我正在构建一个基于位置的签到web应用程序,有点像本地的4square,但基于RFID标签。
无论如何,每次签入都存储在一个MySQL表中,其中userID和签入时间作为DATETIME列。
现在我想展示一下哪些用户在不同车站之间的签到时间最短。
解释:假设用户A在21:43:12签到,然后在21:43:19再次签到。他在7秒内在站点之间移动。
数据库中有数以千计的签到,如何编写SQL来选择两个最接近的签入时间的用户?
发布于 2012-08-03 20:31:17
非常快的解决方案会引入一些预计算。比如存储当前签入和之前签入之间的差异。
在这种情况下,您将以快速方式选择所需内容(只要您按索引覆盖该列)。
在这种情况下,不使用预计算将导致可怕的查询,这些查询将在类似笛卡尔的产生式上操作。
发布于 2012-08-03 20:27:01
试试这个:
select
a.id,
b.id,
abs(a.rfid-b.rfid)
from
table1 a,
table1 a
where
a.userID=b.userID
// and any other conditions to make it a single user
group by
a.id,
b.id,
a.rfid,
b.rfid
order by
abs(a.rfid-b.rfid) desc
limit 1发布于 2012-08-03 20:26:49
你试过什么?你看过DATEDIFF http://msdn.microsoft.com/en-us/library/ms189794.aspx吗?
干杯--乔克
https://stackoverflow.com/questions/11795653
复制相似问题