星期一间隔查询从星期一开始

时间:2014-09-15 14:49:01

标签: sql postgresql aggregate-functions dateinterval

FIDDLE

我需要做一个JasperReport。我需要显示的是帐户流程总数,分为weekly intervalsnumber帐户和activated个帐户。

到目前为止我得到的每周间隔查询:

declined

这似乎是正确的,但不是SELECT * FROM account_details WHERE DATE date_opened = DATE_ADD(2014-01-01, INTERVAL(1-DAYOFWEEK(2014-01-01)) +1 DAY) 正确的。它一直在抱怨POSTGRES。以下是我希望实现的目标:

enter image description here

更新 这很难看,但我不知道更好。我做的工作虽然如此。但不知道是否可以重新考虑它至少看起来更好。我此刻也不知道如何处理除零。

1-DAYOFWEEK

1 个答案:

答案 0 :(得分:1)

SELECT to_char(d.day, 'YYYY/MM/DD" - "')
    || to_char(d.day + 6, 'YYYY/MM/DD') AS week
     , count(situation ILIKE '%active%' OR NULL) AS activated
     , ...
FROM   (
   SELECT day::date
   FROM   generate_series('2014-08-11'::date
                        , '2014-09-14'::date
                        , '1 week'::interval) day
   ) d
LEFT   JOIN account_details a ON a.date_opened >= d.day 
                             AND a.date_opened <  d.day + 7  -- 7, not 6!
GROUP  BY d.day;

相关答案:

有关计算具体值的更多信息:

除此之外:您通常会使用enum或查找表,只存储situation的ID,而不是冗余的冗长文本。