假设我有一个只有三列的大表。
整数id, 时间戳ts, 双值
如果我想获得给定复杂日期表达式的值,那么实现该目标的最佳方法是什么?
例如,如果我希望在周末和工作日的18:00到8:00之间以及2014年的学校假期的任何时间获得所有价值。
显然,其中一些时间是可变的,因此解决方案应该是动态的。我刚在想 在另一个表中存储学校假期等一系列日期间隔以进行检查。但是,我想创建一个自定义的Postgres函数来隐藏一些复杂性。
有没有人知道类似的代码或有建议? 特别是处理上述时间的情况,除了周末逻辑?
由于
答案 0 :(得分:1)
带假期表
select *
from
t
left join
holiday on date_trunc('day', t.ts) = holiday.day
where
extract(dow from ts) in (0, 6) -- Weekend
or
(extract(hour from ts) >= 18 and extract(hour from ts) <= 8)
or
holiday.day is not null -- Holiday