database - 如何在 Postgres 中进行循环选择联合
问题描述
我正在尝试在 Table1 的初始选择语句中为每一行从 Table2 中选择。
初始select
语句看起来像
Select * from Table1 Where GroupID='someId' AND ObjectID='someID'
Table1 将返回类似于以下内容的内容(只有 0-1 个返回的行具有空 EndDate 值)。
表 2 如下所示
基本上我的目标是遍历第一个选择语句行。对于每一行,我想使用objectid、startdate和enddate来选择 Table2 中所有适当的行。然后对我从表 2 中选择的所有数据执行 UNION(?)。我希望能够选择 Table2 中的所有行,其 objectid 与给定的 objectid 匹配,并且时间戳位于开始/结束日期之间(如果 enddate 为空,则为当前时间戳)。那有意义吗?我一直在网上寻找,但还没有找到一种方法来实现这样的循环选择联合。
我不确定这是否可以在单个 select 语句中实现,或者是否需要/更清洁的存储过程(两者都可以,但如果可以的话,我宁愿避免存储过程)。
解决方案
您可以通过加入来做到这一点:
SELECT t2.*
FROM Table2 t2 INNER JOIN Table1 t1
ON t1.objectid = t2.objectid
AND t2.timestamp BETWEEN t1.startdate AND COALESCE(t1.enddate, current_timestamp)
WHERE t1.GroupID = 'someId' AND t1.ObjectID = 'someID'
推荐阅读
- node.js - 如何覆盖肯定类型或引用自定义文件
- javascript - 从数组数组创建 JavaScript 字典的简单方法
- javascript - 如何在 JavaScript 中使用 async/await 延迟数组回调?
- javascript - 如何在 JavaFX WebView 中延迟加载尚未下载的图像?
- python - Powershell 加密和 Python 解密
- c++ - 函数的模板推导如何在 C++ 中工作?
- c# - 每次在统一 3D 中启用脚本时创建一个新的 CSV 文件
- sql - 如何检查其中一个索赔人是否具有状态 0 并根据该状态分配索赔状态
- arangodb - ArangoDB 对稍微不寻常的需求的适用性
- python - 在python中模拟redis