我有如下的 sql:
with CTE as (
select user_id,level,plugged,plugged_ac,plugged_usb,created_at from probe_batteries where probe_batteries.user_id='91' and probe_batteries.created_at > timestamp '2014-06-07 17:00:00'
and probe_batteries.created_at < timestamp '2014-06-07 23:00:00'
)
select CTE.user_id as user_id, avg(CTE.level), bool_or(CTE.plugged), bool_or(CTE.plugged_ac), bool_or(CTE.plugged_usb),date_trunc('second',CTE.created_at) as created_at
from CTE
group by created_at, user_id
order by created_at asc
但是表结果并没有按照timestamp类型的created_at(见结果最后一列)聚合
91;95.0000000000000000;f;f;f;"2014-06-07 20:46:06"
91;95.0000000000000000;f;f;f;"2014-06-07 21:19:11"
91;95.0000000000000000;f;f;f;"2014-06-07 21:19:12"
91;95.0000000000000000;f;f;f;"2014-06-07 21:19:12"
91;95.0000000000000000;f;f;f;"2014-06-07 21:19:12"
91;95.0000000000000000;f;f;f;"2014-06-07 21:19:13"
91;95.0000000000000000;f;f;f;"2014-06-07 21:19:13"
91;95.0000000000000000;f;f;f;"2014-06-07 21:19:13"
91;95.0000000000000000;f;f;f;"2014-06-07 21:19:14"
是不是我的sql语句有问题?谢谢
最佳答案
您的表达式别名 created_at
匹配您的 CTE
命名子查询的列名。
尝试改用另一个别名,例如:
WITH CTE AS (
SELECT user_id,level,plugged,plugged_ac,plugged_usb,created_at
FROM probe_batteries
WHERE user_id='91' AND created_at > timestamp '2014-06-07 17:00:00'
AND created_at < timestamp '2014-06-07 23:00:00'
)
SELECT CTE.user_id as user_id, avg(CTE.level), bool_or(CTE.plugged),
bool_or(CTE.plugged_ac), bool_or(CTE.plugged_usb),
date_trunc('second',CTE.created_at) AS dt_at
FROM CTE
GROUP BY dt_at, user_id
ORDER BY dt_at ASC;
关于postgresql 不按我的时间戳聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26482188/