SQL如何在比较两个SQL表时选择最大值
我正在做一个项目,我被一个问题困住了: 我想创建一种基于wi-fi的GPS。 有两个表(用户和位置),我需要将结果放在第三个表中 第一个表是用户手机发送信息的位置 具有信号强度的电话MAC地址和无线接入点MAC。用户手机可以看到多个无线接入点 第二个表是存储所有已知无线接入点及其坐标(纬度和经度)的位置 以下是表格:SQL如何在比较两个SQL表时选择最大值,sql,max,Sql,Max,我正在做一个项目,我被一个问题困住了: 我想创建一种基于wi-fi的GPS。 有两个表(用户和位置),我需要将结果放在第三个表中 第一个表是用户手机发送信息的位置 具有信号强度的电话MAC地址和无线接入点MAC。用户手机可以看到多个无线接入点 第二个表是存储所有已知无线接入点及其坐标(纬度和经度)的位置 以下是表格: 用户: | PhoneMac | apMac | signal | | user1 |11:11:11 | 20
用户
:
| PhoneMac | apMac | signal |
| user1 |11:11:11 | 20 |
| user1 |22:22:22 | 80 |
| user1 |33:33:33 | 50 |
| user1 |55:55:55 | 99 |
| user2 |11:11:11 | 60 |
| user3 |44:44:44 | 10 |
| user3 |11:11:11 | 90 |
位置
表格:
| apMac | Lat | Lon |
| 11:11:11 |10.000 |30.000 |
| 33:33:33 |30.000 |30.000 |
| 44:44:44 |40.000 |40.000 |
我需要一个从用户
表中获取apMac的查询,检查他们是否在位置
表中,并从找到的位置中选择信号最强的位置
所以结果应该是PhoneMac和所选AP的坐标。每个用户都应该这样做
使用上表,这应该是正确的结果:
| PhoneMac | Lat | Lon |
| user1 |30.000 |30.000 |
| user2 |10.000 |10.000 |
| user3 |10.000 |10.000 |
sql = "SELECT t1.PhoneMac, t1.apMac, t1.signal, t2.apMac, t2.lat, t2.lon,
COUNT(t1.MacTel) AS num
FROM users t1
INNER JOIN locations t2
ON t1.apMac=t2.apMac
GROUP BY t1.PhoneMac
ORDER BY num DESC";
这是我目前掌握的代码。我不知道如何包含关于选择信号最强的
apMac
的部分,因为现在它只返回列表中的第一个apMac
。在大多数数据库中,可以使用行数()
:
在MySQL、Access或其他不支持ANSI标准的数据库中,行号()
,您可以通过相关子查询来实现这一点。这里有一个方法:
select distinct PhoneMac,
(select lat from Locations l where l.apMac = u.apMac order by signal limit 1) as lat,
(select lon from Locations l where l.apMac = u.apMac order by signal limit 1) as long
from users u
这是什么数据库系统?SQL只是查询语言,而不是数据库产品。。。
select distinct PhoneMac,
(select lat from Locations l where l.apMac = u.apMac order by signal limit 1) as lat,
(select lon from Locations l where l.apMac = u.apMac order by signal limit 1) as long
from users u