针对一年中的季度或周运行查询

时间:2018-05-29 21:31:19

标签: sql postgresql

我有这个查询适用于1季度。但是,如果我想在日历年的第2季度,第3季度和第4季度甚至每周进行相同的查询,该怎么办?

如何在不必手动更改定义一年中四分之一或一周的值的情况下执行相同的查询?

SELECT count(1), AVG(resolved_at::TIMESTAMP - created_at::TIMESTAMP) 
FROM supp_cases 
WHERE created_at::TIMESTAMP >= '2017-01-01 00:00:00'::TIMESTAMP 
AND resolved_at::TIMESTAMP <= '2017-03-31 23:59:59'::TIMESTAMP;

Q1 = 2017-01-01 00:00:00 TO 2017-03-31 23:59:59
Q2 = 2017-04-01 00:00:00 TO 2017-06-30 23:59:59
Q3 = 2017-07-01 00:00:00 TO 2017-09-30 23:59:59
Q4 = 2017-10-01 00:00:00 TO 2017-12-31 23:59:59

2 个答案:

答案 0 :(得分:1)

这个怎么样?

SELECT TO_CHAR(created_at, 'YYYY-Q') as created_at_yyyyq,
       TO_CHAR(resolved_at, 'YYYY-Q') as resolved_at_yyyyq,
       count(*)
FROM supp_cases 
GROUP BY created_at_yyyyq, resolved_at_yyyyq
ORDER BY created_at_yyyyq, resolved_at_yyyyq;

如果您真的想在同一季度创建和解决行,可以添加:

WHERE TO_CHAR(created_at, 'YYYY-Q') = TO_CHAR(resolved_at, 'YYYY-Q')

答案 1 :(得分:0)

您可以尝试使用间隔,例如:

SELECT * FROM example WHERE created_at > '2017-01-01'
 AND resolved_at < (DATE('2017-01-01') + INTERVAL '1 WEEKS');


SELECT * FROM example WHERE created_at > '2017-01-01'
 AND resolved_at < (DATE('2017-01-01') + INTERVAL '2 MONTHS');