如何确定我的 postgres 查询结果的顺序?
How to determine the order of the result from my postgres query?
我有以下查询:
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。我该如何实现?
您有两个相同的 time
。 order by
仅使用 time
作为键。当键值相同时,这些键的结果顺序是任意且不确定的。可以从一次执行更改为下一次执行。
为防止出现这种情况,请向 order by
添加一个额外的列,以便每一行都是唯一的。在这种情况下,这似乎是 tag
:
order by "time", tag
您想显示最近的两行。在您的示例中,它们具有相同的 date/time 但它们也可能不同。为了找到最近的两行,您必须应用 ORDER BY
子句。
但是,您希望以不同的顺序显示这两行,因此您必须在查询中放置一个额外的 ORDER BY
。这是通过从查询结果中选择(即将查询放入子查询)来完成的:
select *
from ( <your query here> ) myquery
order by tag desc;
试试这个:
按 1 desc 排序,2
(第一列降序,第二列降序)
我有以下查询:
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。我该如何实现?
您有两个相同的 time
。 order by
仅使用 time
作为键。当键值相同时,这些键的结果顺序是任意且不确定的。可以从一次执行更改为下一次执行。
为防止出现这种情况,请向 order by
添加一个额外的列,以便每一行都是唯一的。在这种情况下,这似乎是 tag
:
order by "time", tag
您想显示最近的两行。在您的示例中,它们具有相同的 date/time 但它们也可能不同。为了找到最近的两行,您必须应用 ORDER BY
子句。
但是,您希望以不同的顺序显示这两行,因此您必须在查询中放置一个额外的 ORDER BY
。这是通过从查询结果中选择(即将查询放入子查询)来完成的:
select *
from ( <your query here> ) myquery
order by tag desc;
试试这个:
按 1 desc 排序,2
(第一列降序,第二列降序)