我有下面的代码,按月份分组数据.
select project_name, to_char (date_sys, 'Month') as Month, sum(BATCH.RECORDS_NUMBER) as Count_of_Documents
from
BATCH
group by project_name, to_char(date_sys, 'Month');
现在我想按周分组如下:
+------------+-------+
|week | Count |
+------------+-------+
| 2016-12-05 | 14 |
| 2016-12-12 | 20 |
| 2016-12-19 | 19 |
| 2016-12-26 | 15 |
| 2017-01-02 | 13 |
| 2017-01-09 | 14 |
| 2017-01-16 | 12 |
| 2017-01-23 | 12 |
| 2017-01-30 | 5 |
date_format和datepart似乎无法与Oracle SQL一起使用,因为我得到了“ORA-00904:“日期格式”:无效标识符”错误。我想知道是否有人可以帮助代码。我也很感激,如果它可以按每日计数排序。谢谢
2条答案
按热度按时间uubf1zoe1#
我建议使用
TRUNC
而不是TO_CHAR
,因为当您的数据跨越一年以上时,它会将几年的数据组合到一个记录中。假设您要根据ISO-8601标准使用按周分组
如果您喜欢从星期天开始一周的工作,那么您可以使用
您还可以按一周中的起始日期
'D'
进行分组。请注意,TRUNC(date_sys, 'D')
的输出取决于当前用户会话NLS_TERRITORY
的设置,因此输出可能不一致。参见ROUND and TRUNC Date Functions
lg40wkob2#
您可以使用ISO week获取一年中的周数,或者,如果您希望第1周从一年的第一天开始,则使用"www"下面的第二个选项:
结果:
| 日期|ISO周编号|WW_周_编号|
| - ------| - ------| - ------|
| 2022年1月1日|五十二|一|
| 2022年1月4日|一|一|
| 2022年1月7日|一|一|
| 二十二年一月十日|二|二|
| 2022年1月13日|二|二|
| 2022年1月16日|二|03|
| 二十二年一月十九日|03| 03|
| 2022年1月22日|03|四|
| 2022年1月25日|四|四|
做组通过使用上面的周数之一,就像你做的月份。
如果你想星期天这里是如何获得星期天的日期星期前一天: