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

我是这样理解你的要求的:

  1. 您想按 yyyymm 对除最后一个月份以外的所有月份进行分组。
  2. 您想按上个月的 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;