我有一个样本记录。这记录如下所示。我只想选择一个流程类型。当我选择进程类型时,我有一个条件。如果这些记录之间的最大创建日期大于最大修改日期,则按创建日期排序并选择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_id customer_id vehicle_id relation_type end_date is_owner create_date modify_date process_type tbody><<tr>1 100 200 1 空 0 2021-09-14 2021-09-13 4 2100 200 1 空 0 2021-09-18 2021-09-13 6 3 100 200 1 空 0 2021-09-16 2021-09-13 5 4100 200 1 空 0 2021-09-19 2021-09-13 3 表类>
选择由两行或多行组成的系列中的最后一行。
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;