【问题标题】:In SQL(postgresql) How to group based on a "timestamp without time zone" column?在 SQL(postgresql) 中如何根据“没有时区的时间戳”列进行分组?
【发布时间】:2015-01-20 06:27:06
【问题描述】:

我正在尝试编写一些查询来根据 postgresql 中的每个月对事物进行分组。

假设我们有一个“犯罪”表,它有 2 列“活动日期”(没有时区的时间戳)和“邮政编码”(字符不同(5)),如何在给定邮政编码的情况下查询每个月的犯罪数量?

例如: 表“罪行”:

activity date               zipcode
2014-11-22 00:52:00           12345
2014-10-22 00:52:00           12345
2014-10-24 00:52:00           12345
2014-12-22 00:52:00           54321

输入:给定的邮政编码“12345”

输出:返回

month        count
2014-10        2
2014-11        1

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    试试:

    select
        extract(year from activity_date) as year,
        to_char(activity_date, 'Mon') as month,
        count(*) as count
    from
        crimes
    group by
        1,extract(month from activity_date);
    

    【讨论】:

    • 感谢您的帮助?但是
    • 错误:函数年(没有时区的时间戳)不存在第 2 行:年(活动日期)作为年,^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。 ********** 错误 ********** 错误:函数年(没有时区的时间戳)不存在 SQL 状态:42883 提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。字符:12
    • 再次感谢它的工作原理!但是,如果我希望根据“2014 Dec”出现在“2014 Jun”之前的日期订购它怎么办。我尝试了“按 1、2 排序”,但结果出乎意料。
    • “Aug”似乎按字母顺序排列。
    • 我也试过“提取(从活动日期开始的月份)作为月份”。它的工作原理!
    【解决方案2】:

    如何从 PostgreSQL 中的时间戳(有/无时区)获取月份?

    使用函数EXTRACT(field FROM source)

    SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40');
    Result: 2
    

    文档链接:https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT

    【讨论】:

      猜你喜欢
      • 2015-03-07
      • 1970-01-01
      • 2011-12-14
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2017-08-20
      • 1970-01-01
      相关资源
      最近更新 更多