如何查看行数趋势
How to check the Row count Trend
我的场景:我想查看行数趋势
我想根据过去 5 天的平均值检查今天的记录计数,如果阈值超过 10%,那么我想显示结果
我有以下数据并且 table 名称是 AGENT 并且
为 inserted_date"4/4/2021" 加载的记录数是 5
并且为插入日期“4/5/2021”加载的记录数为 6
并且为插入日期“4/6/2021”加载的记录数为 1
所以我的查询应该检查最新的插入日期“4/6/2021”并且记录计数为 1,大于阈值 10%,即过去 2 天的平均计数为 5.5
如果 avg 的计数与过去 2 天的平均值不匹配,我希望结果填充为 1,如果趋势匹配,则输出应为 0
请帮忙解决这个问题
您可以使用聚合和 window 函数。像这样:
select (case when cnt < avg_cnt * 0.9 then 1 else 0 end) as matching_flag
from (select inserteddt, count(*) as cnt,
avg(count(*)) over (order by inserteddt rows between 2 preceding and 1 preceding) as avg_cnt,
row_number() over (order by inserteddt desc) as seqnum
from t
where inserted_dt >= current_date - interval '2 day'
group by inserteddt
) i
where seqnum = 1;
众所周知,日期函数依赖于数据库,但这给出了如何实现这一点的想法。
我的场景:我想查看行数趋势 我想根据过去 5 天的平均值检查今天的记录计数,如果阈值超过 10%,那么我想显示结果
我有以下数据并且 table 名称是 AGENT 并且 为 inserted_date"4/4/2021" 加载的记录数是 5 并且为插入日期“4/5/2021”加载的记录数为 6 并且为插入日期“4/6/2021”加载的记录数为 1
所以我的查询应该检查最新的插入日期“4/6/2021”并且记录计数为 1,大于阈值 10%,即过去 2 天的平均计数为 5.5
如果 avg 的计数与过去 2 天的平均值不匹配,我希望结果填充为 1,如果趋势匹配,则输出应为 0
请帮忙解决这个问题
您可以使用聚合和 window 函数。像这样:
select (case when cnt < avg_cnt * 0.9 then 1 else 0 end) as matching_flag
from (select inserteddt, count(*) as cnt,
avg(count(*)) over (order by inserteddt rows between 2 preceding and 1 preceding) as avg_cnt,
row_number() over (order by inserteddt desc) as seqnum
from t
where inserted_dt >= current_date - interval '2 day'
group by inserteddt
) i
where seqnum = 1;
众所周知,日期函数依赖于数据库,但这给出了如何实现这一点的想法。