首页 > 解决方案 > 使用 WHERE 条件时,Postgres 查询以双精度 [] 打乱值

问题描述

我有一个观点,我正在查询查询根据包含的条件提供混合结果的位置。该表检索股票代码、收盘价 (cc)、EMA20 和 EMA50。close、EMA20 和 EMA50 是双精度数组,其中第一个索引处的值对应于最近的时间值。

没有任何条件:

使用以下查询时,数组的值会被打乱,并提供如果计算了正确的数组值则不应返回的结果。

SELECT ticker, exchange, cc, EMA20, EMA50
FROM symbolsview
WHERE 
    exchange IN('NYSE', 'NASDAQ', 'AMEX')
    AND (EMA20[1] > EMA50[1])
    AND ((cc[1] <= EMA50[1]) OR (ll[1] <= EMA50[1]))
    AND (cc[2] >= EMA50[2])

当我运行此查询时,相同符号的值是:

由于某种原因,这些列的值已被移动。此外,当我添加另一个条件 'AND ticker = 'XXX' 其中 XXX 是股票代码值时,在查询结果中没有显示此附加条件的情况下,不会显示任何结果。如果我在没有任何条件的情况下查询视图,则数组将返回正确顺序的值。

有一个表包含 JSON[] 列中的值。存储的视图从 JSON[] 创建 close、EMA20 和 EMA50 双精度。视图提取值并执行 array_agg。请参阅下面的代码。

SELECT ticker, 
        array_agg(obj->>'EMA20')::float[] as EMA20,
        array_agg(obj->>'EMA50')::float[] as EMA50,
        array_agg(obj->>'low')::float[] as ll, 
        array_agg(obj->>'close')::float[] as cc
        FROM symbols, jsonb_array_elements(symbols.last5stats) obj

任何有关为什么要改组数组的见解都会有所帮助。

标签: arrayspostgresqlconditional-statements

解决方案


推荐阅读