【问题标题】:Max value from all values in column to new column列中所有值到新列的最大值
【发布时间】:2019-02-07 14:04:38
【问题描述】:

我需要在包含所有记录的最大年份(存储为文本)的 select 语句中添加新列,然后将其标记为 CY/PY。只有两年总是在表格中。

 year    value   
 2019    value1  
 2019    value2  
 2018    value3  

到目前为止,我尝试了这个,但它只返回该行的最大值,而不是整个列。

 select year, value, IIF(year=MAX(year), 'CY', 'PY') AS "CY/PY" from table

预期:

year    value     CY/PY
2019    value1    CY
2019    value2    CY
2018    value3    PY

【问题讨论】:

  • 您需要从子查询中获取最大年份。

标签: sql netezza


【解决方案1】:

我想你想要一个窗口函数:

select year, value,
       (case when year = MAX(year) over () then 'CY' else 'PY' end) AS "CY/PY"
from table

【讨论】:

    【解决方案2】:

    尝试使用MAX 作为解析函数:

    WITH cte AS (
        SELECT year, value, MAX(year) OVER () AS max_year
        FROM yourTable
    )
    
    SELECT
        year,
        value,
        IIF(year = max_year, 'CY', 'PY') AS "CY/PY"
    FROM cte;
    

    【讨论】:

      【解决方案3】:

      尝试在您的 IIF 中使用子查询:

      select year, value, IIF(year=(select MAX(year) from table), 'CY', 'PY') AS "CY/PY" from table
      

      【讨论】:

      • 这实际上看起来不错,但我得到了错误。 “错误:函数'IIF(BOOL,UNKNOWN,UNKNOWN)'不存在无法识别满足给定参数类型的函数您可能需要添加显式类型转换”调试似乎有点重。
      • 尝试将 IIF 替换为: case when year=(select MAX(year) from table) then 'CY' else 'PY' end
      猜你喜欢
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 2017-08-15
      • 2021-08-01
      • 2022-01-14
      • 1970-01-01
      • 2016-06-03
      • 2022-07-16
      相关资源
      最近更新 更多