sql - 避免在 SQL Server 过程中获取
问题描述
我有一张桌子,上面的区域看起来像这样:
ID NAME Coord
-------------------------
1 area1 bla
1 area2 bla
1 area3 bla
以及一个对象的位置取决于时间的表格:
Time_Stamp Latitude Longitude
---------------------------------------------------
2018-07-17 21:13:30.000 bla bla
2018-07-17 21:13:45.000 bla bla
2018-07-17 21:14:00.000 bla bla
2018-07-17 21:14:15.000 bla bla
2018-07-17 21:14:30.000 bla bla
2018-07-17 21:14:45.000 bla bla
2018-07-17 21:15:00.000 bla bla
2018-07-17 21:15:15.000 bla bla
2018-07-17 21:15:30.000 bla bla
2018-07-17 21:15:45.000 bla bla
2018-07-17 21:16:00.000 bla bla
从这里我选择一个带有对象foreach区域位置的结果集(类型=> 0外部区域,1内部区域)
TS area type
-----------------------------------------------
2018-07-17 21:13:30.000 area1 1
2018-07-17 21:13:30.000 area2 0
2018-07-17 21:13:30.000 area3 0
2018-07-17 21:13:45.000 area1 0
2018-07-17 21:13:45.000 area2 0
2018-07-17 21:13:45.000 area3 0
2018-07-17 21:14:00.000 area1 0
2018-07-17 21:14:00.000 area2 1
2018-07-17 21:14:00.000 area3 0
从这个数据集中,我需要在对象进入和离开一个区域时获取每个区域的时间。类似于:
TS area type
------------------------------------------
2018-07-17 21:13:30.000 area1 1
2018-07-17 21:13:45.000 area1 0
2018-07-17 21:14:00.000 area2 1
这么久......我在提取(foreach 区域)中有一个选择。
select *
from
(select
min(ts) TS,
area,
type
from
(select
*,
grp = ROW_NUMBER() OVER(ORDER BY ts) -
ROW_NUMBER() OVER(PARTITION BY type ORDER BY ts)
from
@t
where
area = @area -- this is area from fetch and
-- @t is the table I've built first
) a
group by
grp, type, area) b
order by
endtime
如果可能的话,我需要一个解决方案来避免获取。
解决方案
我想你只需要partition by
:
select min(ts) as TS, area, type
from (select t.*,
(row_number() over (partition by area order by ts) -
row_number() over (partition by area, type order by ts)
) as grp
from @t t
) t
group by grp, type, area
order by min(ts) desc;
外部查询不是必需的 -endtime
无论如何都没有在您的子查询中定义。
推荐阅读
- javascript - 使用图像关键字查询将来自谷歌的随机图像设置为背景
- vba - “没有发现细胞。” 运行 VBA 脚本时 Excel 2016 出错
- node.js - base64 转 S3 多张图片
- key-bindings - 如何重置鱼壳键绑定
- node.js - 如何知道何时运行 redis.quit()
- ios - 如何在 iOS 中使用 Firebase 删除已发送的远程推送通知?
- javascript - Express.js 服务器:使用中间件的 PUT 请求
- java - 成功登录后 Spring Boot Active Directory 身份验证不重定向
- c# - Asp.Net C# mvc。运行编译的应用程序
- java - 模拟 openInputStream 读取方法