此查询每周正确分组,但排序奇怪:
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,
答案 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
格式掩码iyyy
和iw
使用您似乎期待的ISO week numbering(例如,2016-01-01分配2015-53)。如果您不想要,则需要切换到yyyy
和ww
而不是