用于从数据库获取最新坐标的SQL查询
作为一个新手,我有一个问题:我有一个关于fleetTracker的小项目,我想在一天内得到每个车队的最新坐标,所以我有如下gps数据库:用于从数据库获取最新坐标的SQL查询,sql,sql-server,Sql,Sql Server,作为一个新手,我有一个问题:我有一个关于fleetTracker的小项目,我想在一天内得到每个车队的最新坐标,所以我有如下gps数据库: gpsDateTime | long | lat | fleetNumber --------------------+------+------+------------- 2018-10-03 14:11:00 | 123 | -123 | ABC1234 2018-10-03 14:21:00 | 124 | -124 | ABC1
gpsDateTime | long | lat | fleetNumber
--------------------+------+------+-------------
2018-10-03 14:11:00 | 123 | -123 | ABC1234
2018-10-03 14:21:00 | 124 | -124 | ABC1234
2018-10-03 14:31:00 | 125 | -125 | ABC1234
2018-10-03 14:41:00 | 126 | -126 | ABC1234
2018-10-03 14:51:00 | 127 | -127 | ABC1234
......
2018-10-04 14:11:00 | 123 | -123 | ABC1234
2018-10-04 14:21:00 | 124 | -124 | ABC1234
2018-10-04 14:31:00 | 125 | -125 | ABC1234
2018-10-04 14:41:00 | 126 | -126 | ABC1234
2018-10-04 14:51:00 | 127 | -127 | ABC1234
......
2018-10-03 14:11:00 | 123 | -123 | JKL4321
......
2018-10-03 14:21:00 | 124 | -124 | JKL4322
2018-10-03 14:31:00 | 125 | -125 | JKL4323
2018-10-03 14:41:00 | 126 | -126 | JKL4324
2018-10-03 14:51:00 | 127 | -127 | JKL4325
2018-10-04 14:11:00 | 123 | -123 | JKL4321
2018-10-04 14:21:00 | 124 | -124 | JKL4322
2018-10-04 14:31:00 | 125 | -125 | JKL4323
2018-10-04 14:41:00 | 126 | -126 | JKL4324
2018-10-04 14:51:00 | 127 | -127 | JKL4325
我的问题是:
SELECT
MAX(gpsDateTime) AS Timee,
long, lat, fleetNumber
FROM
GPS
WHERE
CAST(gpsDateTime AS DATE) = '2018-10-03'
GROUP BY
fleetNumber, gpsDateTime, long, lat
ORDER BY
Timee DESC
但返回的结果如下所示:
2018-10-03 14:11:00 |123 |-123|ABC1234
2018-10-03 14:21:00 |124 |-124|ABC1234
2018-10-03 14:31:00 |125 |-125|ABC1234
2018-10-03 14:41:00 |126 |-126|ABC1234
2018-10-03 14:51:00 |127 |-127|ABC1234
2018-10-03 14:11:00 |123 |-123|JKL4321
2018-10-03 14:21:00 |124 |-124|JKL4322
2018-10-03 14:31:00 |125 |-125|JKL4323
2018-10-03 14:41:00 |126 |-126|JKL4324
2018-10-03 14:51:00 |127 |-127|JKL4325
我需要这样的结果(每个fleetNumber只需要最新的一个):
提前感谢。您可以使用行号()
您可以使用row_number()
使用windows函数作为辅助答案是一个更好的选择,您还可以通过独立于SQL Server的派生表来实现您的需求
select B.Timee,A.long,A.lat, A.fleetNumber
from GPS A inner join
(select max(gpsDateTime) as Timee,fleetNumber
from GPS
Where cast(gpsDateTime as Date) = '2018-10-03'
group by fleetNumber,gpsDateTime) B
on A.gpsDateTime=B.Timee and A.fleetNumber= B.fleetNumber
使用windows函数作为辅助答案是一个更好的选择,您还可以通过独立于SQL Server的派生表来实现您的需求
select B.Timee,A.long,A.lat, A.fleetNumber
from GPS A inner join
(select max(gpsDateTime) as Timee,fleetNumber
from GPS
Where cast(gpsDateTime as Date) = '2018-10-03'
group by fleetNumber,gpsDateTime) B
on A.gpsDateTime=B.Timee and A.fleetNumber= B.fleetNumber
select B.Timee,A.long,A.lat, A.fleetNumber
from GPS A inner join
(select max(gpsDateTime) as Timee,fleetNumber
from GPS
Where cast(gpsDateTime as Date) = '2018-10-03'
group by fleetNumber,gpsDateTime) B
on A.gpsDateTime=B.Timee and A.fleetNumber= B.fleetNumber