Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Tsql MS访问交叉应用模拟_Tsql_Ms Access_Greatest N Per Group_Cross Apply - Fatal编程技术网

Tsql MS访问交叉应用模拟

Tsql MS访问交叉应用模拟,tsql,ms-access,greatest-n-per-group,cross-apply,Tsql,Ms Access,Greatest N Per Group,Cross Apply,有一个带有设备轨道的桌子。每个跟踪设备都有一个唯一的ID,用户将其GPS跟踪上传到站点,并指定跟踪设备ID。这些数据存储在一个表中,因此每一行由DeviceID、Lat、Lon和Date列组成。例如: ID DeviceID Lon Lat Date ----------- -------------- --------------- ---------------- -----------------------

有一个带有设备轨道的桌子。每个跟踪设备都有一个唯一的ID,用户将其GPS跟踪上传到站点,并指定跟踪设备ID。这些数据存储在一个表中,因此每一行由
DeviceID
Lat
Lon
Date
列组成。例如:

ID          DeviceID       Lon             Lat              Date
----------- -------------- --------------- ---------------- ----------------------- 
1652726     DLX*X-------   -20.56528769     20.68961421      2015-09-01 00:00:02.000
1652727     F4K*T-------   -20.95713512     20.80473833      2015-09-01 00:00:05.000
1652728     F4K*4-------   -20.87060998     20.00037712      2015-09-01 00:00:27.000
1652729     DLX*K-------   -20.87061003     20.00039333      2015-09-01 00:01:04.000
1652730     DLX*7-------   -20.87060189     20.00039248      2015-09-01 00:01:30.000
1652731     F4K*T-------   -20.8706208      20.00037551      2015-09-01 00:01:39.000
1652732     F4K*2-------   -20.87060854     20.00038717      2015-09-01 00:01:51.000
1652733     DLX*7-------   -20.90161642     20.98749573      2015-09-01 00:02:02.000
1652734     F4K*4-------   -20.87060145     20.0003771       2015-09-01 00:02:05.000
1652735     F4K*T-------   -20.0907285      20.00816632      2015-09-01 00:02:10.000
1652736     F4K*4-------   -20.90157325     20.98748467      2015-09-01 00:02:49.000
1652737     F4K*T-------   -20.22212807     20.77575096      2015-09-01 00:02:53.000
1652738     DLX*G-------   -20.87261384     20.00250375      2015-09-01 00:03:09.000
1652739     DLX*D-------   -20.76831339     20.08081263      2015-09-01 00:03:15.000
1652740     F4K*T-------   -20.76913834     20.08311954      2015-09-01 00:03:24.000
1652741     F4K*T-------   -20.53557613     20.78679804      2015-09-01 00:03:57.000
1652742     F4K*2-------   -20.8706104      20.00037474      2015-09-01 00:03:59.000
1652743     F4K*2-------   -20.76919089     20.0830366       2015-09-01 00:04:15.000
需要显示每个设备的5个最新坐标。我成功地编写了一个T-SQL查询,它可以:

SELECT ss.[DeviceID], cc.*
FROM (SELECT DISTINCT [DeviceID] FROM [Device_Places]) ss
CROSS APPLY (SELECT TOP 5 S.[Date], S.Lat, S.Lon FROM [Device_Places] S
             WHERE S.DeviceID = ss.DeviceID
             ORDER BY S.[Date] DESC) cc

但是,不幸的是,此SQL在Microsoft Access中无效(检查到MS Access 2016)。我试图用
CROSS-APPLY
将上述查询转换为自连接变量。但是没有用。感谢所有能够在MS Access中帮助实现上述查询的人。

我相信我终于找到了一个MS Access查询,类似于我之前发布的
交叉应用
变体

SELECT DP.*
FROM DEVICE_PLACES DP
WHERE DP.ID IN
(
    SELECT TOP 5 ID
    FROM DEVICE_PLACES
    WHERE DeviceID = DP.DeviceID
    ORDER BY [Date] DESC, ID
)

但是,在超过550000行的数据集上运行self-join变量会显示出灾难性的性能。将每个设备的数据集减少到5个最新坐标需要4分钟以上。

您可以尝试这种方法。从1997年开始。。。如果ACCESS应用程序只是SQL Server数据库的前端,则使用传递查询。请注意,我相信ACCESS-SQL最后一次得到实质性增强是在上一个千年(1995年)。@MartinSmith:方法1基本上就是他现在所拥有的,方法2的性能可能会比这差得多。