首页 > 解决方案 > 日期差异的情况

问题描述

我正在尝试计算或计算日期差异为一定数量的行数,但不确定如何

select count(case when date_diff('day', min_time, max_time) <= 7 then 1 else null end)  / count(*)
from table 

但它似乎没有解决问题,不确定是否有更好的方法来实现这一点,谢谢!

标签: sqlpostgresql

解决方案


编辑:正如@shawnt00 在对该问题的评论中提到的那样,问题很可能是您正在划分整数(也导致整数,即在这种情况下为 0 或 1)。添加 a* 1.0应该可以解决问题(或者如果您愿意,可以添加到 float8 )。


您可以为此使用该FILTER子句:

select count(*) filter (where date_diff('day', min_time, max_time) <= 7) * 1.0 / count(*)
from table 

虽然看起来你正在计算平均值,但这样的事情可能是最简单的:

select avg(case when date_diff('day', min_time, max_time) <= 7 then 1.0 else 0.0 end)
from table 

推荐阅读