每周集团数年(postgresql)

时间:2016-05-30 08:01:15

标签: sql postgresql date postgresql-9.1 datepart

此查询每周正确分组,但排序奇怪:

SELECT    date_part('week' ,date), SUM(qty)
FROM      hr
WHERE     date between '2016-01-01' and '2016-01-31'
GROUP BY  date_part('week', date)
ORDER BY  1

此查询的结果是:

wrong sort

应该是这样的:

correct sort

如何确定一周属于哪一年?

任何提示或线索欢迎。

TIA,

2 个答案:

答案 0 :(得分:1)

与弱者一起结束这一年:

SELECT    concat(date_part('year' ,date),date_part('week' ,date)), SUM(qty)
FROM      hr
WHERE     date between '2016-01-01' and '2016-01-31'
GROUP BY  concat(date_part('year' ,date),date_part('week' ,date))
ORDER BY  1

修改:您可以尝试将第一列选择替换为:

concat(date_part('year' ,date),
       CASE WHEN date_part('week' ,date) < 10 THEN '0' ELSE '' END,
       date_part('week' ,date)) 

答案 1 :(得分:1)

使用to_char()在单个可排序值中格式化年份周:

SELECT to_char(date '2016-01-01', 'iyyy-iw'), SUM(qty)
FROM hr
WHERE date between '2016-01-01' and '2016-01-31'
GROUP BY to_char(date '2016-01-01', 'iyyy-iw')
ORDER BY 1

格式掩码iyyyiw使用您似乎期待的ISO week numbering(例如,2016-01-01分配2015-53)。如果您不想要,则需要切换到yyyyww而不是

相关问题