sql - Postgresql 选择所选日期和状态之间的数据

标签 sql hibernate postgresql

在我的 Java Web 应用程序中,我使用 Postgresql,一些数据表会自动填充到服务器中。在数据库中,我有一个如下所示的状态表:

enter image description here

我想选择在所选日期和车辆保持连接的位置之间与车辆相关的数据。只是我想选择上表中绿色的数据,这意味着我确切地想要第一次连接时的数据=true,以及最后一次连接=true之后连接=false时的数据。我尝试编写sql语句,但无法获取所需的数据。

我所做的是:

select *from status where vehicleId='redcar' and 
date >= '2014-02-28 00:00:00' and date <= '2014-02-28 23:59:59' and ...

如何获取所请求的数据?

最佳答案

您可以使用window function来做到这一点.

类似这样的事情:

with status_changes as(
        select
             id,
             vehicleid,
             connected,
             connected != lag(connected)
                 over (partition by vehicleid
                       order by date asc) as has_changed
         from STATUS
)
select
    id,
    vehicleid, 
    connected,
    date
from status_changes
where has_changed = true
      and vehicle = 'redcar'
      and date between '2014-02-28 00:00:00' and '2014-02-28 23:59:59';
  • lag(status) 将返回之前的状态(在我们的分区内)。

  • 按车辆 ID 分区(按日期排序)可确保我们的 lag() 返回具有相同车辆 ID 的行。

查看window functions的列表有关 lag() 和相关函数的更多信息。

关于sql - Postgresql 选择所选日期和状态之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22092608/

相关文章:

c# - Excel 到 SQL。批量复制的替代方案?

sql - Postgres 检查 jsonb 数组是否不包含值返回空结果集

hibernate - 刷新模式在 grails 中从 AUTO 更改为 MANUAL

java - spring-hibernate-jpa namedNativeQuery 中的列名无效

PostgreSQL 子查询总数和百分比

sql - 如何循环遍历表来查找数据集?

mysql - 我想在mysql中插入这个符号(')

java - HQL不提取空字段的结果

r - 如何导入带有字符列的数据框(RPostgreSQL)?

hibernate - 无法在 postgres 数据库中使用 hibernate 注释创建唯一约束