次の表を考えてみましょう。
Id(PK, int) | DocDate(long) | Sender(varchar) | Recipient(varchar) | PeriodStart(long) | PeriodEnd(long)
、 、ごとSender
にRecipient
、異なる時点で複数のエントリを書いています。したがって、異なります。PerdiodStart
PeriodEnd
DocDate
ここで、最新DocDate
の foreachSender
のID を選択する必要があります。私が自分で見つけた唯一の解決策は、CTE を使用することです。Recipient
PeriodStart
PerdiodEnd
with prevFilter as (
select max(DocDate), Sender, Recipient, PeriodStart, PeriodEnd
from Table
group
by Sender, Recipient, PeriodStart, PeriodEnd
)
select Id
from Table t
inner
join prevFilter pf
on pf.DocDate = t.DocDate
and pf.Sender = t.Sender
and pf.Recipient = t.Recipient
and pf.PeriodStart = t.PeriodStart
and pf.PeriodEnd = t.PeriodEnd
このクエリのパフォーマンスは低いと思われるかもしれませんが、クラスター化インデックスを使用するとパフォーマンスを向上させることができます。
しかし、この問題に対するより高速でエレガントな解決策がないかどうか疑問に思っています。誰でも提供できますか?