sql—计算列日期差后的数据提取

d4so4syb  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(356)

我的条件是 (f.fit_chk_dt, f.fit_valid_to)>366 以及 (o.regn_dt,f.fit_chk_dt)>731 然后应该获取fitness和owner表中所有列的所有记录。
这是我的选择:

SELECT * 
     FROM vt_fitness f
LEFT JOIN vt_owner o ON o.regn_no=f.regn_no AND o.off_cd=f.off_cd AND 
    o.state_cd=f.state_cd 
    WHERE f.state_cd='X' 
      AND extract(year from age(f.fit_chk_dt, f.fit_valid_to))>366 
      AND extract(year from age(o.regn_dt, f.fit_chk_dt))>731
 GROUP BY f.regn_no, o.regn_dt, f.fit_chk_dt, f.fit_valid_to
dzhpxtsq

dzhpxtsq1#

说“这没用”是最没用的说法。要解决这个问题,你需要提供两条信息,确切地说,你得到了什么,你期望什么;为什么你认为你错了也会有用。
尽管如此,我猜这个错误源于您对age函数返回值的最初误解。age返回一个间隔,包括年、月、日。。。然后从间隔中提取年份,希望日期之间的差值分别大于366年和731年(旁注:这就是为什么@a\u horse\u没有指定名称“interval'366 years'”)存在于您的问题。你的数据不超过731年。
我怀疑分别是1年和2年(366天~=1年,731天~=2年(366+365))。也许:

select * 
  from vt_fitness f
  left join vt_owner o 
         on o.regn_no=f.regn_no 
        and o.off_cd=f.off_cd 
        and o.state_cd=f.state_cd 
 where f.state_cd='x' 
   and age(f.fit_chk_dt, f.fit_valid_to) > interval '1 year' 
   and age(o.regn_dt, f.fit_chk_dt) > interval '2 year' 
 group by f.regn_no, o.regn_dt, f.fit_chk_dt, f.fit_valid_to;

相关问题