【发布时间】:2018-05-29 20:57:06
【问题描述】:
WITH eas AS
(
SELECT
DATE_TRUNC('week',create_ts)::DATE - '1 day'::INTERVAL AS DATE
,COUNT(name) AS ase
FROM local
WHERE type='sr'
GROUP BY DATE_TRUNC('week',create_ts)::DATE - '1 day'::INTERVAL
)
, ias AS
(
SELECT
DATE_TRUNC('week',create_ts)::DATE - '1 day'::INTERVAL AS DATE
,COUNT(name) AS ase
FROM local
WHERE type='sr'
AND state NOT IN ('AZ','CA')
GROUP BY DATE_TRUNC('week',create_ts)::DATE - '1 day'::INTERVAL
)
SELECT
DATE_TRUNC('week',eas.date)::DATE - '1 day'::INTERVAL AS l_create
,ase + asi AS count
FROM eas FULL JOIN ias
ON ias.date = eas.date
GROUP BY ase
,asi
,DATE_TRUNC('week',eas.date)::DATE - '1 day'::INTERVAL
ORDER BY DATE_TRUNC('week',eas.date)::DATE - '1 day'::INTERVAL ASC
如果我运行第一条语句,它会给出以下结果:
3/18/18 0:00 21
3/25/18 0:00 46
4/1/18 0:00 25
4/8/18 0:00 25
第二句话:
3/18/18 0:00 67
3/25/18 0:00 129
4/1/18 0:00 148
4/8/18 0:00 138
如果我运行完整的查询:
2018-03-18 00:00:00 175
2018-03-25 00:00:00 173
2018-04-01 00:00:00 163
而想要的结果是:
3/18/18 0:00 88
3/25/18 0:00 175
4/1/18 0:00 173
4/8/18 0:00 163
我错过了什么??
【问题讨论】:
-
好吧,首先你缺少循环。您的代码中没有循环。你正在做的是 CTE 中的 SELECT
-
“我错过了什么??”发布表的结构(如
CREATE TABLE)并解释循环的含义。这是 PL/pgSQL 循环的一部分吗?请出示。 -
但是对于这个简单的查询,CTE 还不够吗?对不起这里的新手
-
@stickybit,循环是指代码的“eas”和“aes”部分
-
我只是说这些不是循环。它们是公用表表达式中的选择语句。
标签: postgresql common-table-expression postgresql-9.2