首先,我为没有小提琴而道歉,但我的数据集太大了。所以我是including a file。
我有一组将用户数据与位置数据相结合的查询。从RF设备收集位置历史数据,并且持久保存该用户的历史。反对提供的SQL file我需要将工作人员可能进入房间的数据合并,离开那个房间,然后回来。该示例可以构成对患者的访问。另一个例子是工作人员连续登录房间。我们只关注时间戳长度超过2分钟的数据。这意味着如果工作人员走过房间并且记录了该位置,则RF读取器可以读取标签。以下是一组初始查询:
with
StaffHistory as(
SELECT
LocationHistories.UserProfileId,
UserProfiles.FirstName,
UserProfiles.LastName,
LocationHistories.LocationId,
Locations.LocationName,
LocationHistories.LocationHistoryTimeStamp,
PreviousLocationTime = LAG(LocationHistories.LocationHistoryTimeStamp, 1) OVER
(PARTITION BY LocationHistories.UserProfileId ORDER BY LocationHistories.LocationHistoryTimeStamp),
NextLocationTime = Lead(LocationHistories.LocationHistoryTimeStamp, 1) OVER
(PARTITION BY LocationHistories.UserProfileId ORDER BY LocationHistories.LocationHistoryTimeStamp)
FROM
LocationHistories
INNER JOIN UserProfiles ON LocationHistories.UserProfileId = UserProfiles.Id
INNER JOIN Locations ON LocationHistories.LocationId = Locations.Id
where LocationTrackingType = 1),
StaffInRoomTime as(
SELECT
StaffHistory.UserProfileId,
StaffHistory.FirstName,
StaffHistory.LastName,
StaffHistory.LocationId,
StaffHistory.LocationName,
DATEDIFF(SECOND, LocationHistoryTimeStamp, NextLocationTime) as TimeSpentInRoom,
StaffHistory.LocationHistoryTimeStamp,
StaffHistory.PreviousLocationTime,
StaffHistory.NextLocationTime
FROM
StaffHistory
Where DATEDIFF(SECOND, LocationHistoryTimeStamp, NextLocationTime) > 120
)
select * from StaffInRoomTime ORDER BY UserProfileId, LocationHistoryTimeStamp
我在这个例子中使用了常用的表表达式。这些是DB中的实际视图。
第一个查询将历史记录与员工联系起来。我们还为Previous记录时间和Next记录时间创建了几列。这样我们就可以确定房间的时间长度。
第二个查询来自第一个查询,我们在此期间设置了一个列,指明工作人员在该位置的时长,我们还会过滤LocationHistoryTimeStamp
和NextLocationTime
所在的任何数据。超过2分钟。
我想要实现的是将工作人员连续登录房间或者如果他们离开房间然后回来的数据。
以下是工作人员连续进入房间的数据集示例:
这将是结果:
以下是针对特定访问跨越多个房间的示例:
我尝试在使用Inner Join
的第二个查询上使用Min(LocationHistoryTimeStamp)
。然而,时间跨度最终不正确,所以我错过了一些东西。
这是我试过的内连接查询:
Select
StaffHistory.LocationId,
StaffHistory.LocationName,
StaffHistory.UserProfileId,
Min(LocationHistoryTimeStamp) as LocationHistoryTimeStamp,
DATEDIFF(SECOND, Min(LocationHistoryTimeStamp), Lead(Min(LocationHistoryTimeStamp), 1) OVER
(PARTITION BY UserProfileId ORDER BY Min(LocationHistoryTimeStamp))) As TimeSpentInRoom,
NextLocationTime = Lead(Min(LocationHistoryTimeStamp), 1) OVER
(PARTITION BY UserProfileId ORDER BY Min(LocationHistoryTimeStamp))
FROM
StaffHistory
Where TimeSpentInRoom > 120
GROUP BY LocationId,LocationName,UserProfileId
答案 0 :(得分:1)
这是声明:
GET /my_index/blogpost/_search
{
"query": {
"bool": {
"must": [
{ "match": {
"name": "bill"
}
}
]
}
}
}