几年内每周分组(postgresql)

Group weekly over several years (postgresql)

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

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

本次查询结果为:

应该是这样的:

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

欢迎任何提示或线索。

TIA,

把弱者的年份连起来:

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

编辑: 您可以尝试将第一列 select 替换为:

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

使用 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(例如,将 2015-53 分配给 2016-01-01)。如果你不想要,你需要切换到 yyyyww 而不是