在时间戳上使用date_trunc时,“列必须出现在GROUP BY子句中”

时间:2018-01-09 15:46:41

标签: sql postgresql

我有一个SQL查询,用于计算具有给定创建日期的联系人。创建日期存储为unix时间戳,以毫秒为单位,我使用to_timestamp方法正确格式化它:

SELECT count(*) AS "Count", date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000)) AS "Create Date"
FROM "contacts"
GROUP BY "contacts"."createdate"
ORDER BY "contacts"."createdate" ASC

结果如下:

Count | Create Date
-----------------------------------------
1     | Sunday, February 1, 2015 12:00 AM
1     | Sunday, February 1, 2015 12:00 AM
1     | Wednesday, April 1, 2015 12:00 AM
1     | Wednesday, April 1, 2015 12:00 AM
1     | Wednesday, April 1, 2015 12:00 AM

我想按月分组,所以对于上面的例子,我想:

Count | Create Date
-----------------------------------------
2     | February 2015
3     | April 2015

我将SQL更改为以下内容:

SELECT count(*) AS "Count", date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000)) AS "Create Date"
FROM "contacts"
GROUP BY date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000))
ORDER BY "contacts"."createdate" ASC

但收到错误:

ERROR: column "contacts.createdate" must appear in the GROUP BY clause or be used in an aggregate function

我有什么方法可以正确地做到这一点吗?

1 个答案:

答案 0 :(得分:2)

您可以按编号引用SELECT中的元素:

SELECT count(*) AS "Count", date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000)) AS "Create Date"
FROM "contacts"
GROUP BY date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000))
ORDER BY 2 ASC