我有一个很大的活动拉动,我必须在表中选择ca.matter_key的最后一个活动,由ca.activity_key(表主键)确定。我想知道最有效的方法,因为最终结果将是20K的球场。
select distinct
ca.matter_key,
ca.activity_key,
ca.actrow1,
ca.actrow2,
ca.actrow3,
ca.actrow4
FROM CaseAct ca
where
ca.matter_key in (
4945046,
5040953,
5025296,
5078360
)
上面的结果将给出以下结果:
Matter_key activity_key actrow1 actrow2 actrow3 actrow4
4945046 12 Data Data Data Data
4945046 13 Data Data Data Data
4945046 14 Data Data Data Data
5040953 35 Data Data Data Data
5040953 36 Data Data Data Data
5025296 77 Data Data Data Data
5025296 78 Data Data Data Data
5025296 79 Data Data Data Data
5078360 NULL Data Data Data Data
4887024 93 Data Data Data Data
4887024 94 Data Data Data Data
4887024 95 Data Data Data Data
5061591 NULL Data Data Data Data
我需要:
Matter_key activity_key actrow1 actrow2 actrow3 actrow4
4945046 14 Data Data Data Data
5040953 36 Data Data Data Data
5025296 79 Data Data Data Data
5078360 NULL Data Data Data Data
4887024 95 Data Data Data Data
5061591 NULL Data Data Data Data
我已经使用ca.matter_key分组和Max(ca.activity_key)组合使用条件在之前的集合上完成了此操作,但是我需要预选的matter_keys,这是一个很大的列表。另外,ca.activity_key()中哪个是拉这个列表最有效的方法?
感谢您的帮助!
答案 0 :(得分:2)
您可以使用row_number()
:
select ca.*
from (select ca.*,
row_number() over (partition by matter_key order by activity_key desc) as seqnum
from CaseAct ca
where ca.matter_key in (4945046, 5040953, 5025296, 5078360)
) ca
where seqnum = 1;
答案 1 :(得分:0)
你也可以使用下面的
select
ca.matter_key,
ca.activity_key,
ca.actrow1,
ca.actrow2,
ca.actrow3,
ca.actrow4
FROM CaseAct ca
join
(
select matter_key,max(activity_key) as maxkey
from
caseact ) b
on b.matter_key=ca.matter_key
and b.maxkey=a.activity_key
答案 2 :(得分:0)
不确定我是否在这里遗漏了一些东西,但肯定是这么简单:
select ca.matter_key,
max(ca.activity_key) activity_key,
ca.actrow1,
ca.actrow2,
ca.actrow3,
ca.actrow4
from CaseAct ca
where ca.matter_key in (4945046,
5040953,
5025296,
5078360)
group by ca.matter_key,
ca.actrow1,
ca.actrow2,
ca.actrow3,
ca.actrow4
答案 3 :(得分:0)
select
a.matter_key,
a.activity_key,
a.actrow1,
a.actrow2,
a.actrow3,
a.actrow4
FROM yourtable a
join
(
select matter_key, max(isnull(activity_key, 0)) as maxi
from yourtable ) b
on b.matter_key=a.matter_key
and b.maxi =isnull(a.activity_key, 0)