SQL选择有序列表中的第一个匹配项
使用Microsoft SQL Server Management Studio 14.0.17213.0版 我有一个按顺序排列的事件列表。我想选择最高的前例SQL选择有序列表中的第一个匹配项,sql,sql-server,Sql,Sql Server,使用Microsoft SQL Server Management Studio 14.0.17213.0版 我有一个按顺序排列的事件列表。我想选择最高的前例账号,完成日期和事件 我的问题是如果我使用 select account_number, event, max(complete_date) as mx_comp from mytable where event in ('event1','event2'....) 然后我得到我所有的账号、列表中的所有事件以
账号
,完成日期
和事件
我的问题是如果我使用
select
account_number, event, max(complete_date) as mx_comp
from
mytable
where
event in ('event1','event2'....)
然后我得到我所有的账号
、列表中的所有事件以及该事件的最大完成日期。但是我想列出帐户号,列出列表中任何项目和相关事件的最大完成日期
此外,完全有可能两件事发生在同一天,所以我不能这样做
select *
from mytable mt
join
(select acct_number, max(complete_date)
from mytable) t on mt.acct_number = t.account_number
and mt.complete_date = t.complete_date
因为如果两个事件发生在同一天,那么我仍然会得到重复的结果
我也曾试着用同样的方法来处理这个问题
row_number() over (order by account_number) as RowNum
但它不起作用,因为我仍然得到所有事件的匹配,而不仅仅是我的最高优先级事件
它实际上归结为需要从有序列表中的项返回与最高重要性匹配相关联的账号、事件和完成日期
我确信这很容易——我就是想不出来,尽管我用谷歌和堆栈搜索,我就是想不出来
我最近一直在想,使用coalesce(mylist)这样的东西可能是可行的,因为我可以把我的列表整理好,但我不知道如何以有意义的方式使用coalesce来解决这个问题
真正的解决方案是创建一个具有优先顺序的表,或者有一个最新的指示符,但是我没有无限的权限来创建任何我想要的表
如果您有任何关于如何匹配有序列表的帮助或想法,我们将不胜感激。您似乎想要:
select t.*
from (select t.*,
row_number() over (partition by account_number order by complete_date desc) as seqnum
from mytable t
where event in ('event1', 'event2', ....)
) t
where seqnum = 1;
你能提供一些样本数据和预期结果吗?