如何使用按顺序排列的用例?



我有一个样本记录。这记录如下所示。我只想选择一个流程类型。当我选择进程类型时,我有一个条件。如果这些记录之间的最大创建日期大于最大修改日期,则按创建日期排序并选择top 1进程类型;如果最大修改日期大于最大创建日期,则按修改日期排序并选择top 1进程类型。

这是我的查询。我尝试了那个查询,但我有一个错误。Process_type在选择列表中无效。

select top 1
process_type
from
#Result veh (nolock) 
where
veh.end_date is null
and veh.is_owner=0
and veh.relation_type=1
group by 
veh.fk_customer_id,
veh.fk_vehicle_id,
veh.relation_type,
veh.is_owner
HAVING COUNT(*) > 1
order by 
CASE WHEN  MAX(veh.create_date)>= MAX(veh.modify_date) THEN veh.create_date ELSE veh.modify_date END desc

这是所有的记录。

<表类>pk_idcustomer_idvehicle_idrelation_typeend_dateis_ownercreate_datemodify_dateprocess_typetbody><<tr>11002001空02021-09-142021-09-13421002001空02021-09-182021-09-13631002001空02021-09-162021-09-13541002001空02021-09-192021-09-133

选择由两行或多行组成的系列中的最后一行。

select process_type
from (
select *
, row_number() over(
partition by fk_customer_id, fk_vehicle_id, relation_type, is_owner 
order by CASE WHEN create_date >= modify_date THEN create_date ELSE modify_date END DESC) rn1
, row_number() over(
partition by fk_customer_id, fk_vehicle_id, relation_type, is_owner 
order by CASE WHEN create_date >= modify_date THEN create_date ELSE modify_date END) rn2            
from #Result
where  end_date is null
and is_owner=0
and relation_type=100
) t
where rn1 = 1 and rn2 > 1;

您似乎想要基于创建日期或修改日期的最大值的记录。那就是:

select top (1) process_type
from# Result veh
where veh.end_date is null and
veh.is_owner = 0 and
veh.relation_type = 1
order by (case when modify_date > create_date then modify_date else create_date end)

如果您希望每个客户都这样,那么您可以使用row_number():

select top (1) process_type
from (select veh.*,
row_number() over (partition by customerid order by (case when modify_date > create_date then modify_date else create_date end)) as seqnum
from #Result veh
where veh.end_date is null and
veh.is_owner = 0 and
veh.relation_type = 1
) veh
where seqnum = 1;

相关内容

  • 没有找到相关文章

最新更新