sql - PostgreSQL查询:根据设备的另一个参数的值选择设备及其一个参数
问题描述
我有一张桌子叫Configuration
. 表的第 1 列是deviceId
,第 2 列是parameter
,第 3 列是value
。
表中设备很多,每个设备只有一个设备ID(第1列);每个设备都有许多配置参数(第 2 列),例如。VER
, DATE
, 等,所有设备都具有相同的配置参数;不同设备的参数值(第 3 列)可能相同或不同。
我想VER
为那些DATE
值大于'2019-05-01' 的设备选择所有设备的配置参数。
如何在一个PostgreSQL
查询中实现这一目标?
解决方案
一种选择是COUNT
用作分析函数来识别匹配的设备:
WITH cte AS (
SELECT deviceId, parameter, value,
COUNT(*) FILTER (WHERE parameter = 'DATE' AND value > '2019-05-01') OVER
(PARTITION BY deviceId) cnt
FROM yourTable
)
SELECT parameter, value
FROM cte
WHERE parameter = 'VER' AND cnt > 0;
演示
另一种方法是通过存在查询:
SELECT parameter, value
FROM yourTable t1
WHERE
parameter = 'VER' AND
EXISTS (SELECT 1 FROM yourTable t2
WHERE t1.deviceId = t2.deviceId AND
t2.parameter = 'DATE' AND
t2.value > '2019-05-01');
推荐阅读
- excel - 如何在excel中将两种不同的日期格式更改为单个日期格式
- python - Python将图像转换为棕褐色
- elasticsearch - 有没有办法使用发布请求将数据存储在logstash中?
- mongodb - DMS 不理解来自 MongoDB 的架构更改
- javascript - TestCafe 跳过点击步骤
- selenium - 一种在驱动程序初始化中阻止 cookie 的方法(EDGE、SAFARI)
- java - Spring Data JPA 查找最近的日期
- javascript - 我可以在 Angular 9 应用程序中使用查询选择器吗
- amazon-web-services - Amazon Web Services (AWS) 的 AWS CloudFormation 模板文件无法创建 EC2 实例
- flutter - Flutter pub get failed with (1; The system cannot find path specified)