CASE无法与select子句中的MAX函数一起正常工作

时间:2019-10-11 07:26:38

标签: sql

我正在使用以下查询来获取记录:

  select       
       MAX(lng_linenumber) as lng_linenumber,      
       str_topic,      
       MAX(dte_expire) as dte_expire,      
       MAX(CASE WHEN CAST(dte_expire as date) >= CAST(getdate() as date) THEN 0 ELSE 1 END ) as Is_Expire
       from table1       
       group by str_topic      
       order by lng_linenumber desc

输出:

enter image description here

我在做什么?

我正在使用case语句获取Is_Expired 0或1,如果过期则为1,否则为0。如突出显示的行所示,dte_expire仍未实现,但Is_Expire的值为1,应为0。

请帮助我在查询中出错的地方。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试以下方式-

select lng_linenumber,str_topic,dte_expire,case when dte_expire >= CAST(getdate() as date) then 0 else 1 end as is_expired
from
(
    select MAX(lng_linenumber) as lng_linenumber, str_topic,MAX(dte_expire) as dte_expire
    from table1       
    group by str_topic
)A      

答案 1 :(得分:0)

您的max()聚合函数导致获得isExpire = 1,因为1是此列的最大值。

使用以下查询。

select t1.str_topic
    , t1.lng_linenumber
    , t2.dte_expire
    , case when cast(t2.dte_expire as date) >= cast(getdate() as date) then 0 else 1 end) as is_Expire
from
    (select       
        max(lng_linenumber) as lng_linenumber,      
        str_topic
        from table1
        group by str_topic) t1
inner join table1 t2 on t2.lng_linenumber = t1.lng_linenumber and t2.str_topic = t1.str_topic
order by t1.lng_linenumber desc