SQL Return 行基于其他行的值

SQL Return rows based on value of other rows

我们使用数据库来捕获交易/交易,我需要找出哪一个是最新的交易。

这里有一些例子:

谢谢, 丹尼尔

如果我没听错,你可以用子查询过滤每笔交易的最新记录,然后忽略最后状态为删除的交易:

select t.*
from mytable t
where 
    t.record = (select max(t1.record) from mytable t1 where t1.dealID = t.dealID)
    and t.action <> 'Delete'

就此而言,您不需要使用列 modified 来获得您想要的结果。

为了提高此查询的性能,请考虑 (dealID, record, action).

上的索引

如果您的数据库支持 window 函数,您也可以用 row_number() 表示:

select record, action, modified, dealID
from (
    select t.*, row_number() over(partition by dealID order by record desc) rn
    from mytable t
) t
where action <> 'Deleted'