选择给定时间段的状态历史记录表的活动状态

巴德拉

我有一个简单的表,其中包含“阅读器”对象的状态历史记录。状态可以是活动的或不活动的。现在,我想查询一个查询,该查询选择在给定时间段内处于活动状态的所有读者。下图显示了我的意思:带有绿色“生命线”的“阅读器”在所显示的时间段内处于活动状态;因此它们应在查询中返回。

在此处输入图片说明

表格ReaderActivity看起来像这样(仅示例,与上面的图片不匹配):

reader_id | state    | timestamp
 1        | ACTIVE   | 1467331201089
 2        | ACTIVE   | 1467332454545
 1        | INACTIVE | 1467348875254
 3        | ACTIVE   | 1467350416546
 1        | ACTIVE   | 1467351871123
 2        | INACTIVE | 1467352111545

当然,有一个Reader实体要reader_id映射到实体

我需要对此进行JPA查询,但是我遇到了一些问题,包括读者对结果的了解,这些问题在这段时间内(在我们研究的这段时期之前就已经处于活动状态)没有“上升沿”(状态从INACTIVE变为ACTIVE) )。

我基本上看到了查询的一部分:

  • 首先,选择所有具有上升沿的边。这很简单:SELECT DISTINCT a.reader FROM ReaderActivity a WHERE a.timestamp >= :startTimestamp AND a.timestamp < :endTimestamp AND a.state = 'ACTIVE'
  • 其次,它应该添加到所有读者之上的列表中,该列表在句点开始之前具有最后一个活动状态。这是我无法正确理解的:我尝试过(结合拳头查询):SELECT DISTINCT a.reader FROM ReaderActivity a WHERE a.timestamp >= :startTimestamp AND a.timestamp < :endTimestamp AND a.state = 'ACTIVE' or (SELECT aa.reader FROM ReaderActivity aa where aa.reader = a.reader AND aa.timestamp < :startTimestamp AND aa.state = 'ACTIVE' GROUP BY aa.reader ORDER BY max(aa.timestamp)) != null

这还会在上图中返回红色标记的读取器,因为AND aa.state = 'ACTIVE'在子查询中,我们已经过滤掉了所有ACTIVE状态,因此最后一个当然是ACTIVE。我应该选择开始时间之前的最后一个状态,然后再检查是否处于活动状态。但是如何?

有人可以带我走正确的路吗?提前致谢!

路加

查询的第一部分将带回其记录在您需要的时间段内变为活动状态的记录。查询的第二部分需要一些改进。

为了执行您要的操作,您将必须为每个reader_id调回最新的状态更改,直到“ startTimeStamp”时刻为止。然后,您可以从这些文件中选择当时被列为“ ACTIVE”的文件。

就像是..

Select a.reader_id 
From ReaderActivity a 
Where a.timeStamp in
( 
  Select max(b.timeStamp) 
  From ReaderActivity b 
  Where b.timestamp < :startTimeStamp 
  And b.reader_id = a.reader_id 
  Group By b.reader_id
)
and a.state = "ACTIVE"

该查询将返回在指定时间段开始时处于活动状态的所有[reader_id]。您可以在原始查询的where子句中运行此代码,也可以使用UNION将其附加到查询的末尾,然后对整个混乱运行Select Distinct(reader_id)。

从表中的组的最大值中进行选择对我来说总是很古怪的。但我希望此查询对您有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取特定时间段内android的浏览历史记录

来自分类Dev

如何从特定时间段删除命令行历史记录?

来自分类Dev

如何设置Firefox 4在特定时间段(即一天)内仅存储历史记录?

来自分类Dev

SQL查询-获取具有时间段的历史记录数据

来自分类Dev

SQL查询-获取具有时间段的历史记录数据

来自分类Dev

如何获取给定时间段内处于活动状态的AKS中的吊舱数量

来自分类Dev

SQL:查找给定时间段内用户的状态更改日期

来自分类Dev

观看状态历史记录会受到其他页面上活动的影响

来自分类Dev

如何比较MySql表中的时间戳并选择早于给定时间段

来自分类Dev

使浏览器删除特定的历史记录状态

来自分类Dev

AngularJS重定向而不推送历史记录状态

来自分类Dev

AngularJS重定向而不推送历史记录状态

来自分类Dev

管理ui路由器状态历史记录

来自分类Dev

gwt-历史记录-如何“保留” UI状态

来自分类Dev

提取历史记录行的最后状态

来自分类Dev

开始新活动时,某些活动会在“android 历史记录”中保持打开状态

来自分类Dev

如何更改活动历史记录

来自分类Dev

平均库存历史记录表

来自分类Dev

大量视图与历史记录表

来自分类Dev

Oracle SQL表历史记录

来自分类Dev

在表上运行历史记录

来自分类Dev

Firestore - 每隔一段时间检索历史记录的最佳方法?

来自分类Dev

重置复选框已选中状态从历史记录中返回

来自分类Dev

uml状态机是否必须具有较浅的历史记录?

来自分类Dev

拉力赛回溯:帮助根据未来状态获取所有历史记录

来自分类Dev

如何避免在标签栏状态下堆叠导航历史记录

来自分类Dev

如何在完全保留分支历史记录的同时将分支状态重置为master?

来自分类Dev

捕获刮板物品中的重定向响应状态/历史记录

来自分类Dev

Bash不会记住历史记录中退出状态为非0的程序

Related 相关文章

  1. 1

    如何获取特定时间段内android的浏览历史记录

  2. 2

    如何从特定时间段删除命令行历史记录?

  3. 3

    如何设置Firefox 4在特定时间段(即一天)内仅存储历史记录?

  4. 4

    SQL查询-获取具有时间段的历史记录数据

  5. 5

    SQL查询-获取具有时间段的历史记录数据

  6. 6

    如何获取给定时间段内处于活动状态的AKS中的吊舱数量

  7. 7

    SQL:查找给定时间段内用户的状态更改日期

  8. 8

    观看状态历史记录会受到其他页面上活动的影响

  9. 9

    如何比较MySql表中的时间戳并选择早于给定时间段

  10. 10

    使浏览器删除特定的历史记录状态

  11. 11

    AngularJS重定向而不推送历史记录状态

  12. 12

    AngularJS重定向而不推送历史记录状态

  13. 13

    管理ui路由器状态历史记录

  14. 14

    gwt-历史记录-如何“保留” UI状态

  15. 15

    提取历史记录行的最后状态

  16. 16

    开始新活动时,某些活动会在“android 历史记录”中保持打开状态

  17. 17

    如何更改活动历史记录

  18. 18

    平均库存历史记录表

  19. 19

    大量视图与历史记录表

  20. 20

    Oracle SQL表历史记录

  21. 21

    在表上运行历史记录

  22. 22

    Firestore - 每隔一段时间检索历史记录的最佳方法?

  23. 23

    重置复选框已选中状态从历史记录中返回

  24. 24

    uml状态机是否必须具有较浅的历史记录?

  25. 25

    拉力赛回溯:帮助根据未来状态获取所有历史记录

  26. 26

    如何避免在标签栏状态下堆叠导航历史记录

  27. 27

    如何在完全保留分支历史记录的同时将分支状态重置为master?

  28. 28

    捕获刮板物品中的重定向响应状态/历史记录

  29. 29

    Bash不会记住历史记录中退出状态为非0的程序

热门标签

归档