从Oracle SQL的星期和年份中获取“一周的开始日期”

问题描述 投票:0回答:3

我一直在使用按周将许多记录分组的查询。通过[>]提取周数

to_char(reportdate, 'IW') as "Week",   

之后使用GROUP BY子句。 “周”总是从星期一开始,如果1月1日不是星期一,则第1周将从上一个星期一开始(或者据我所知这行代码)。

因此,如果获得了如下表(对于三个示例行)

Week  Year  Sales  Visits
 32   2017    22     55
 33   2017    30     65
 01   2019    55     103

我想添加一列日期,以使其成为一周的开始。我当时想将分组查询用作子查询,然后在后面简单地添加一列,但是我无法确切地弄清楚如何将“周”和“年”数字映射到这样的日期。

我已经尝试过此行来获取日期

trunc(next_day   (trunc(to_date(Yr,'yy'),'yy')  -1,'Mon') + (7*(Wk - 1))    -7)  

但是并不是每一行都成立。

任何向我指出正确方向的想法都会受到赞赏。

我一直在使用按周将许多记录分组的查询。周编号由to_char(reportdate,'IW')提取为“周”,此后使用GROUP BY子句。 “周” ...

sql oracle date
3个回答
0
投票

我想您可以只使用min(reportdate)。由于小组是从星期几开始的几周,因此应该给出小组的第一天,恰好是该星期开始的星期一。


0
投票

根据ISO-8601,第一周是1月4日。我使用此功能从ISO周获取日期:


0
投票

ISO-8601将一年的第一周视为该年大部分时间的第一周。要拥有该年的大部分时间,则它必须包含该年中一周中的至少4天,并且必须包含1月4日。

© www.soinside.com 2019 - 2024. All rights reserved.