让我们考虑下表。
Id(PK, int) | DocDate(long) | Sender(varchar) | Recipient(varchar) | PeriodStart(long) | PeriodEnd(long)
对于每个Sender
, Recipient
, PerdiodStart
,PeriodEnd
我在不同的时间点写多个条目。所以DocDate
不同。
现在我必须选择最新的 id DocDate
、 foreach Sender
、Recipient
、PeriodStart
、PerdiodEnd
。我自己找到的唯一解决方案是使用 CTE。
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
你现在可能会想,这个查询的性能很差,但我可以用聚集索引来改进它。
但我想知道,如果没有更快、更优雅的解决方案来解决这个问题。谁能提供一份?