SQL (REDSHIFT) 语句中 CASE 和 LISTAGG 的最佳方式?

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

我想列出每个产品 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 个月的内容?

sql amazon-redshift
1个回答
1
投票

您声明“尝试仅列出过去 12 个月内的日期”,但 case 表达式显示“如果

as_of_date
最多存在一年,请返回 product_id 分区的
all
日期”。

我猜你更想要类似

listagg(case when date_cmp(...) then as_of_date else '' end, ',') within ...
listagg(distinct ...)
之类的东西。

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