首页 > 解决方案 > PostgreSQL查询:根据设备的另一个参数的值选择设备及其一个参数

问题描述

我有一张桌子叫Configuration. 表的第 1 列是deviceId,第 2 列是parameter,第 3 列是value

表中设备很多,每个设备只有一个设备ID(第1列);每个设备都有许多配置参数(第 2 列),例如。VER, DATE, 等,所有设备都具有相同的配置参数;不同设备的参数值(第 3 列)可能相同或不同。

我想VER为那些DATE值大于'2019-05-01' 的设备选择所有设备的配置参数。

如何在一个PostgreSQL查询中实现这一目标?

标签: sqlpostgresql

解决方案


一种选择是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');

推荐阅读