首页 > 解决方案 > 如何从我的 postgres 查询中确定结果的顺序?

问题描述

我有以下查询:

SELECT
    time as "time",
    case 
       when tag = 'KEB1.DB_BP.01.STATUS.SOC' THEN 'SOC'
       when tag = 'KEB1.DB_BP.01.STATUS.SOH' THEN 'SOH'
    end as "tag",
    value as "value"
FROM metrics
WHERE 
    ("time" BETWEEN '2021-07-02T10:39:47.266Z' AND '2021-07-09T10:39:47.266Z') AND
    (container = '1234') AND
    (tag = 'KEB1.DB_BP.01.STATUS.SOC' OR tag = 'KEB1.DB_BP.01.STATUS.SOH')
    GROUP BY 1, 2, 3
    ORDER BY time desc
    LIMIT 2

这给了我结果:

在此处输入图像描述

有时结果的顺序变化是从 SOH -> SOC 或从 SOC -> SOH。我正在尝试修改我的查询,所以我总是先得到 SOH,然后再得到 SOC。我怎样才能做到这一点?

标签: sqlpostgresqlsql-order-by

解决方案


您有两个time相同的 s。order by仅用time作键。当键值相同时,这些键的结果顺序是任意且不确定的。In 可以从一个执行更改为下一个执行。

为防止这种情况,请向 中添加一个额外的列,order by以便每一行都是唯一的。在这种情况下,这似乎是tag

order by "time", tag

推荐阅读