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