Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于从数据库获取最新坐标的SQL查询_Sql_Sql Server - Fatal编程技术网

用于从数据库获取最新坐标的SQL查询

用于从数据库获取最新坐标的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

作为一个新手,我有一个问题:我有一个关于fleetTracker的小项目,我想在一天内得到每个车队的最新坐标,所以我有如下gps数据库:

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