根据参数日期设置的与财政年度相关的数据

  • 本文关键字:数据 参数 日期 设置 postgresql
  • 更新时间 :
  • 英文 :


我有一个student_table,在此表中有一个columter_financial_aid_type,下一列是date_,因此Student_financial_aid_type的值,例如。='Direct'和日期_ 1/04/2018。我已经使用了CTE表,并且在代码开头的参数日期,以便截至当天我得到学生的数量。例如我的参数日期是20/04/2019。

我的财政年度从4月至3月EG 1/04/18-31/3/19。

我的问题是在哪里表明学生在财政年度获得了某种形式的经济援助,我将拥有一个输出栏,上面写着" y"或" n"。因此,使用上面的示例,因为日期1/04/2018不在参数日期的财政年度(20/04/19(,所以实际上是在上一个财政年度(1/04/18-18-31/3/19(然后,我希望这是在输出列中的" n",例如参数日期(20/04/19(的财政年度,学生没有得到任何经济援助。但是,如果我碰巧更改参数日期2/06/18,那么学生获得经济援助的日期(1/04/18(作为参数日期,因此我的输出列现在将有'y'反映这一点。因此,我这样做必须是动态的,并响应参数日期,因为这是我作为用户在

时将更改的参数日期。

我尝试使用date_part,我设法拥有了学生收到支出的日期的数量但是我不确定该怎么做。

WITH 
parameter_date as ( 
select '2019-04-26':: date p_date),
student_cohort as (select * from (
SELECT Distinct 
ms.studentid,ss.student_admission_date,ms.graduation_date

FROM master_student_table ms              
left join student_semeter ss on ms.student_id=ss.student_id , 
parameter_date, p 
AND ss.student_admission_date <= p_date -- i.e. began studies less than 
or equal to p_date
AND (ms.graduation_date is null or ms.graduation_date > p_date)) -- i.e. 
student finished studies more than p_date or IS NULL
)x  ),
student_finance as (select * from ( select  date_part('month', st.date_:: 
date)
date_part, st.date_, st.studentid,st.student_financial_aid_type                                                                                                                                                                                                                        
from student_table st
left join student_cohort s on st.studentid = s.studentid
where st.student_financial_aid_type in ('direct' , 'indirect')                                                                                                                      
) x )     

select distinct
s.student_id,                  
s.graduation_date,                 
s.admissiondate_date,                  
sf.date_,
-- this is what I would like it to be -- case when sf.date is in the same 
--financial year as the parameter_date 
--then 'Y'  else 'N' end was_financial_aid_received_in_the_fy,     
sf.date_part                                             
from
cohort s                                     
left join student_finance sf on s.student_id = sf.student_id and 
sf.student_financial_aid_type = 'direct'
left join student_finance sf1 on s.student_id = sf1.student_id and 
sf1.student_financial_aid_type = 'indirect' `   

我希望输出列'was_financial_aid_received_in_in_the_fy'从案例语句中,如果学生收到的经济援助与parameter_date和'n'如果是sf.date_,则具有'y'案件

非常感谢您的所有帮助

我认为这个问题基本上归结为以下内容:

  1. 给定参数日期,找出该日期的财政年度。
  2. 弄清楚其他日期是否落在本财政年度。

这是使用杂物的好地方,这是我最喜欢的类型之一。我们可以从参数日期中找出财政年度,并使用过多代表它。如果参数日期是在4月之前的,则财政年度应为上一年的4月1日(包括(到今年的4月1日(独家(。如果参数日期是四月之后,则财政年度应为今年的4月1日(包括(至明年4月1日(独家(。

这是一个查询,应该演示如何执行此操作:

WITH parameter_date as (
  select '2019-04-26'::date p_date
), fiscal_year as (
  select daterange(
        make_date(case when date_part('month', p_date)<4
                       THEN date_part('year', p_date)::int-1
                       ELSE date_part('year', p_date)::int END,
                   4, 1),
        make_date(case when date_part('month', p_date)<4
                        THEN date_part('year', p_date)::int 
                        ELSE date_part('year', p_date)::int+1 END,
                   4, 1),
        '[)') as f_year
  FROM parameter_date
),
test_data as (
  select test_date::date from (values 
    ('2019-04-01'),
    ('2018-04-01'),
    ('2019-03-02'),
    ('2020-12-01'),
    ('2017-05-26'),
    ('2020-02-27'),
    ('2020-04-01')
  ) v(test_date)
)
select test_date, 
       CASE WHEN test_date <@ fiscal_year.f_year THEN 'Y' ELSE 'N' END as in_f_year
from test_data, fiscal_year;
 test_date  | in_f_year
------------+-----------
 2019-04-01 | Y
 2018-04-01 | N
 2019-03-02 | N
 2020-12-01 | N
 2017-05-26 | N
 2020-02-27 | Y
 2020-04-01 | N
(7 rows)

最新更新