我想列出每个产品 ID 的所有产品日期。为了避免 LISTAGG 大小限制,我尝试仅列出过去 12 个月内的日期。
SELECT distinct product_id, as_of_date,
CASE WHEN date_cmp(to_date(as_of_date),'YYYY-MM-DD'),to_date(add_months(current_date,-12,'YYYY-MM-DD')) > 0
THEN LISTAGG(as_of_date, ',')
WITHIN GROUP (Order by product.as_of_date)
OVER (PARTITION BY product_id)
END from product
运行此程序时,我收到错误消息
“结果大小超出 LISTAGG 限制”
这可能意味着 CASE 不仅仅选择过去 12 个月。
如何确保我只选择过去 12 个月的内容?
您声明“尝试仅列出过去 12 个月内的日期”,但 case 表达式显示“如果
as_of_date
最多存在一年,请返回 product_id
分区的 all日期”。
我猜你更想要类似
listagg(case when date_cmp(...) then as_of_date else '' end, ',') within ...
或 listagg(distinct ...)
之类的东西。