【问题标题】:How to get interval by month from table?如何从表中按月获取间隔?
【发布时间】:2015-04-05 19:20:52
【问题描述】:

我有一个带有 DATE 字段的表(也可以输入)。如何编写查询以获取这样的月份间隔:

   start        end
2015-01-01  2015-01-31
2015-02-01  2015-02-28
2015-03-01  2015-03-31
      and so on ..

我将使用什么样的 SQL 函数来得到这个结果? 我正在使用 Postgres 数据库。

查询会创建一个表来存储我的数据:

CREATE TABLE "DEPOSIT_EVENT" (
  id bigint NOT NULL,
  amount numeric(19,2),
  date timestamp without time zone,
  description character varying(255),
  eventtype character varying(255),
  processingdate timestamp without time zone,
  status boolean,
  view boolean,
  deposit_id bigint,
  CONSTRAINT "DEPOSIT_EVENT_pkey" PRIMARY KEY (id ),
  CONSTRAINT fk_dp0pc33hchopclsau0uknefgr FOREIGN KEY (deposit_id)
      REFERENCES "DEPOSITS" (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
);

如上所述,我只想按月进行间隔。

例如我有几行:

id    amount  date 
1     100     2014-01-01 08:39:51.774
2     31      2014-01-10 08:39:51.774
3     2       2014-01-21 08:39:51.774
4     22      2014-02-04 08:39:51.774
5     74      2014-03-14 08:39:51.774

我只想要包含这样一个或多个项目的月份:

         column
2014-01-01 - 2014-01-30
2014-02-01 - 2014-02-28
2014-03-01 - 2014-03-31

【问题讨论】:

标签: sql postgresql


【解决方案1】:

以下应该有效:

SELECT 
    date_trunc('MONTH', date) as start_date, 
    date_trunc('MONTH', date) + INTERVAL '1 MONTH - 1 day' as end_Date, 
    COUNT(id) AS recordcount 
FROM DEPOSIT_EVENT 
GROUP BY 1,2

这将获取每个日期的月初和月底,然后对这两个日期执行GROUP BY。我在第三个字段中添加了recordcount,只是为了表明您还可以在同一查询中获得该时间段内的记录计数。

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    相关资源
    最近更新 更多