Table Folder
Column | Type | Modifiers
-------------------+--------------------------+---------------------------------
ID | integer | not null default
Name | character varying | not null
Size | bigint | not null
Timestamp | timestamp with time zone |
尝试计算2014年上传的所有文件。同年的每月计数。
SELECT COUNT(*) FROM "File" WHERE "Timestamp" > '2014-01-01 21:53:23+08'
答案 0 :(得分:0)
SELECT TO_CHAR(Timestamp, 'Mon') AS month,
COUNT(*) AS fileCount
FROM File
WHERE EXTRACT(YEAR FROM Timestamp) = 2014
GROUP BY TO_CHAR(Timestamp, 'Mon')
如果您想要一份显示多年的月度细分的报告,那么您可以稍微修改上述查询:
SELECT TO_CHAR(Timestamp, 'Mon') AS month,
EXTRACT(YEAR FROM Timestamp) AS year,
COUNT(*) AS fileCount
FROM File
WHERE EXTRACT(YEAR FROM Timestamp) IN (2014, 2015, ...)
GROUP BY TO_CHAR(Timestamp, 'Mon'),
EXTRACT(YEAR FROM Timestamp)
答案 1 :(得分:0)
看到您自己的查询,您似乎想要考虑从时区GMT + 8小时(新加坡,香港或其他)看到的2014年时间戳并相应计算。我认为查询应该是:
SELECT EXTRACT(MONTH FROM "Timestamp" AT TIMEZONE 'GMT-8'), COUNT(*)
FROM "File"
WHERE "Timestamp" >= timestamp with timezone '2014-01-01 00:00:00+08'
AND "Timestamp" < timestamp with timezone '2015-01-01 00:00:00+08'
GROUP BY EXTRACT(MONTH FROM "Timestamp" AT TIMEZONE 'GMT-8')
ORDER BY EXTRACT(MONTH FROM "Timestamp" AT TIMEZONE 'GMT-8');
由于我没有在where子句中使用“Timestamp”上的任何函数,因此索引可能更有可能用于加速查询(前提是 是一个索引“时间戳“列”。
但我必须承认时区总是让我困惑。当我想谈到香港的日期时间文字和'GMT-8'(减号),当我想转换到香港时间时,为什么它是'+ 08'(加号)?不过,它应该是正确的。