我想要完成的是:我想计算每个商店过去 49 天和一天中的小时(0 - 24 小时)的行数中位数。
到目前为止我所做的:我当前的 SQL 如下。我错误地使用了中值函数并收到以下错误: not a single-group group function
.
SELECT
store,
EXTRACT(HOUR FROM CAST(date AS TIMESTAMP)) AS hour_of_day,
median(count(*))
FROM table
WHERE date >= trunc(sysdate - 49)
GROUP BY
store,
EXTRACT(HOUR FROM CAST(date AS TIMESTAMP))
我想知道的是:可以以这种方式使用中值函数吗?如果是这样,我必须在查询组中更改某些内容吗?如果没有,你能推荐另一种方法来解决这个问题吗?
我不知道你是否可以用窗口函数来做到这一点。相关的分析函数,例如median
不累积工作。
但是您可以使用横向连接:
with dh as (
select trunc(date) as dte, extract(hour from date) as hh,
shop, count(*) as cnt
from t
)
select dh.*, m.median_cnt
from dh cross join lateral
(select median(cnt) as median_cnt
from dh dh2
where dh2.hh = dh.hh and
dh2.dte >= dh.dte - interval '48' day and
dh2.dte <= dte
) m;
注意:不清楚您所说的 49 天是什么意思。我假设您需要正好 7 周,即过去 48 天加上该行的当前日期。
此外,这会忽略0
值。如果您需要考虑这些,请提出一个新问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句