在我的 Java Web 应用程序中,我使用 Postgresql,一些数据表会自动填充到服务器中。在数据库中,我有一个如下所示的状态表:
我想选择在所选日期和车辆保持连接的位置之间与车辆相关的数据。只是我想选择上表中绿色的数据,这意味着我确切地想要第一次连接时的数据=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/