【问题标题】:PostgreSQL timeseries query with outer join带有外连接的 PostgreSQL 时间序列查询
【发布时间】:2016-10-11 08:35:25
【问题描述】:

在 PostgreSQL 9.5 数据库中有一个表 metrics_raw 包含各种指标(类型:varchar)。
类型为(例如):TRARTC
我正在执行以下 SQL 来获取年初至今的每月汇总:

SELECT
  count(*),
  "ticks"."ts" AS "timestamp"
FROM
  "metrics_raw"
RIGHT OUTER JOIN
  generate_series('2016-01-01'::timestamp, '2016-10-10'::timestamp, '1 month'::interval) AS ticks(ts)
ON
  "ticks"."ts" = date_trunc('months', "metrics_raw"."timestamp")
WHERE
  "metrics_raw"."type" = 'TRA' OR
  "metrics_raw"."type" IS NULL
GROUP BY "ticks"."ts"
ORDER BY "ticks"."ts"

该表包含一些 TRA 类型的记录(约 10 条记录)和 1 条 RTC 类型的记录。
执行 TRA 的查询我得到 10 行结果如预期,但对于 RTC 查询我只得到 7 行.另一件事是没有 RTC 指标,我也得到 10 行。

哪里可能出错了?

【问题讨论】:

  • 问题是 Where 条件。您应该使用左外连接打开查询并将 metric_raw.type = 放入连接闭包

标签: sql postgresql join time-series outer-join


【解决方案1】:

感谢@Nemeros,我将查询固定为:

SELECT
  "ticks"."ts" AS "timestamp"
FROM
  generate_series('2016-01-01'::timestamp, '2016-10-10'::timestamp, '1 month'::interval) AS ticks(ts)
LEFT OUTER JOIN
  (
    SELECT *
    FROM "metrics_raw"
    WHERE "metrics_raw"."type" = 'TRA'
  ) as "metrics"
ON
  "ticks"."ts" = date_trunc('months', "metrics"."timestamp")
GROUP BY "ticks"."ts"
ORDER BY "ticks"."ts"

【讨论】:

    猜你喜欢
    • 2020-11-29
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2019-05-24
    • 2013-01-19
    相关资源
    最近更新 更多