我正在使用以下查询来获取记录:
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
输出:
我在做什么?
我正在使用case语句获取Is_Expired 0或1,如果过期则为1,否则为0。如突出显示的行所示,dte_expire仍未实现,但Is_Expire的值为1,应为0。
请帮助我在查询中出错的地方。
谢谢。
答案 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