PostgreSQL 如何根据查询中的条件创建布尔列

PostgreSQL How to create a boolean column from conditions within a query

我有以下 SQL 代码:

SELECT sensor_id, reader_id, rssi, date_time, time_diff_lead, reader_diff
FROM    
    (
    SELECT doc->>'sensorId' as sensor_id, doc->>'readerId' as reader_id, (doc->>'rssi')::int as rssi, created_at as date_time,
    EXTRACT(EPOCH FROM lead(created_at) OVER w - created_at) as time_diff_lead,
    (lead(doc->>'readerId') OVER w)::int - (doc->>'readerId')::int as reader_diff
    FROM public.sensor_data
    WINDOW w AS (PARTITION BY doc->>'sensorId' ORDER BY created_at)
    ) as x
WHERE rssi > 380 OR time_diff_lead > 18.0 AND reader_diff = 0
ORDER BY sensor_id, date_time

WHERE 子句定义了我想用来创建布尔列的条件。

所有这些数据都来自带有 jsonB 列的 table 并且为了提高效率(我认为......)我需要通过正确的键将此列添加到 table .

table 将至少每 30 秒更新一次新记录。并且上面的查询将比 运行 少。因此该列中将有空值。一般而言,这将如何影响对 table 的查询? (数据科学新手)

我正在创业并试图为我们的数据收集奠定基础(他们让我做这件事:P)所以请拆开我的代码并指出更好的方法!

一个条件一个布尔类型,所以你可以select你从布尔条件得到的值并给它一个别名:


SELECT sensor_id, reader_id, rssi, date_time
 , time_diff_lead, reader_diff
 , (rssi > 380 OR time_diff_lead > 18.0 AND reader_diff = 0) AS bull
FROM    (
    SELECT doc->>'sensorId' as sensor_id, doc->>'readerId' as reader_id
     , (doc->>'rssi')::int as rssi, created_at as date_time
    ,  EXTRACT(EPOCH FROM lead(created_at) OVER w - created_at) as time_diff_lead
    , (lead(doc->>'readerId') OVER w)::int - (doc->>'readerId')::int as reader_diff
    FROM public.sensor_data
    WINDOW w AS (PARTITION BY doc->>'sensorId' ORDER BY created_at)
    ) as x
ORDER BY sensor_id, date_time
;

[更新]使用计算列将需要将条件拉到主查询。