美好的一天!我需要帮助计算基于给定月份的类别的7天回调间隔。输出将是所有类别的总回叫。
我真的很有帮助大tanks!
样本表:
mif(category) |date_started
1 | 2017/01/5
1 | 2017/01/11 * count as 7 day interval cat1 #1<br>
1 | 2017/01/23
2 | 2017/01/5
2 | 2017/01/7 * count as 7 day interval in cat2 #1 <br>
2 | 2017/01/9 * count as 7 day interval in cat2 #2<br>
3 | 2017/01/5
3 | 2017/01/23
3 | 2017/01/25 * count as 7 day interval in cat3 #2<br/><br>
最终输出= 4(所有类别中所有回调的总和)
我已经创建了一个带有for循环的函数来循环每个mif(类别)
CREATE OR REPLACE FUNCTION public.service_call_back(IN i_month integer, IN i_year integer, OUT o_val integer)
Returns integer
LANGUAGE plpgsql
as $function$
declare
v_looper integer;
v_counter integer;
begin
for v_looper in select distinct mif from service_report where extract(month from date_time_started) = i_month AND extract(year from date_time_started) = I_year order by mif
loop
#category
end loop
答案 0 :(得分:0)
我建议你使用如下的查询来同时计算两个计数。虽然你没有解释7天回调意味着什么通过推论,它似乎是任何一行,其间的天数是7或更少,所以可以使用滞后函数为我们提供前一个日期和然后计算天数。
请注意,将存储日期与计算日期进行比较,而不是将每个存储日期转换为月份值和年份值,这样做会更好。
选择 mif,mif_count,call_back_7s,sum(call_back_7s)over()sum_callbacks 来自( 选择 MIF ,count(*)mif_count ,数( 提取时的情况(从date_time_started开始的天数 - prev_call_date)&lt; = 7然后1结束 )call_back_7s 来自( 选择 * ,lag(date_time_started,1)over(由mif order by date_time_started分区)prev_call_date 来自service_report 其中date_time_started&gt; = make_date(2017,1,1) AND date_time_started&lt; make_date(2017,1,1)+ interval&#39; 1个月&#39; )sr 由mif组 )d
要使用您的临时参数创建日期,然后将其放入make_date函数中,如下所示:
make_date(i_year , i_month, 1)
<强> Demo 强>:
| mif | mif_count | call_back_7s | sum_callbacks |
|-----|-----------|--------------|---------------|
| 1 | 3 | 1 | 4 |
| 2 | 3 | 2 | 4 |
| 3 | 3 | 1 | 4 |