Sql 从列中的所有值到新列的最大值

Sql 从列中的所有值到新列的最大值,sql,netezza,Sql,Netezza,我需要在select语句中添加新列,该语句包含所有记录中作为文本存储的max year,然后将其标记为CY/PY。只有两年的时间是可以考虑的 year value 2019 value1 2019 value2 2018 value3 到目前为止,我尝试了这个方法,但它只返回该行中的max,而不是整个列 select year, value, IIF(year=MAX(year), 'CY', 'PY') AS "CY/PY" from ta

我需要在select语句中添加新列,该语句包含所有记录中作为文本存储的max year,然后将其标记为CY/PY。只有两年的时间是可以考虑的

 year    value   
 2019    value1  
 2019    value2  
 2018    value3  
到目前为止,我尝试了这个方法,但它只返回该行中的max,而不是整个列

 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
尝试将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;
select year, value,
       (case when year = MAX(year) over () then 'CY' else 'PY' end) AS "CY/PY"
from table

我想您需要一个窗口功能:

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;
select year, value,
       (case when year = MAX(year) over () then 'CY' else 'PY' end) AS "CY/PY"
from table

尝试在IIF中使用子查询:

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

您需要从子查询中获取最大年份。这实际上看起来不错,但我得到了错误。错误:函数“IIFBOOL,UNKNOWN,UNKNOWN”不存在无法识别满足给定参数类型的函数您可能需要添加显式类型转换调试似乎有点繁重。请尝试将IIF替换为:case when year=从表中选择MAXyear然后选择“CY”else“PY”end