sql to_char - 基于日期条件的格式
sql to_char - format based on date condition
这是针对过去 12 个月的月度报告,例如2018 年 1 月生产,查看 2016 年 12 月 - 2017 年 12 月。
我需要生成一个 case/when 来根据条件格式化日期——如果 {prod_date} 是数据集中最后可用的月份,则格式化为周末日期 (12/2 /2017、12/9/2017、12/16/2017 等 - yyyyddmm)。但是,如果日期早于上个月,则格式为 'yyyymm'.
最终结果组应该是:
20170212
20170912
20171612
20172312
20173012
201711
201710
201709
...
201612
我是这样理解你的要求的:
- 您想按 yyyymm 对除最后一个月份以外的所有月份进行分组。
- 您想按上个月的 yyyyddmm 分组,其中 dd 应为周末(星期六)。
使用 CASE
表达式检查月份。截断为 ISO 周以获得一周的星期一。添加五天得到星期六。按计算的日期字符串分组并聚合您想要的任何值。例如:
select
grp,
max(value1) as max_value1,
sum(value2) as sum_value2
from
(
select
case when to_char(dt, 'yyyymm') = (select to_char(max(dt), 'yyyymm') from mytable)
then to_char(trunc(dt, 'iw') + 5, 'yyyyddmm')
else to_char(dt, 'yyyymm')
end as grp,
value1,
value2
from mytable
)
group by grp
order by grp desc;
这是针对过去 12 个月的月度报告,例如2018 年 1 月生产,查看 2016 年 12 月 - 2017 年 12 月。
我需要生成一个 case/when 来根据条件格式化日期——如果 {prod_date} 是数据集中最后可用的月份,则格式化为周末日期 (12/2 /2017、12/9/2017、12/16/2017 等 - yyyyddmm)。但是,如果日期早于上个月,则格式为 'yyyymm'.
最终结果组应该是:
20170212
20170912
20171612
20172312
20173012
201711
201710
201709
...
201612
我是这样理解你的要求的:
- 您想按 yyyymm 对除最后一个月份以外的所有月份进行分组。
- 您想按上个月的 yyyyddmm 分组,其中 dd 应为周末(星期六)。
使用 CASE
表达式检查月份。截断为 ISO 周以获得一周的星期一。添加五天得到星期六。按计算的日期字符串分组并聚合您想要的任何值。例如:
select
grp,
max(value1) as max_value1,
sum(value2) as sum_value2
from
(
select
case when to_char(dt, 'yyyymm') = (select to_char(max(dt), 'yyyymm') from mytable)
then to_char(trunc(dt, 'iw') + 5, 'yyyyddmm')
else to_char(dt, 'yyyymm')
end as grp,
value1,
value2
from mytable
)
group by grp
order by grp desc;