admin

最佳方法:在有关N-1关系的SQL查询中获取最新的N边记录

sql

我的问题有点简单…让我们假设我有两个关于1-N关系的简单表:

Order
----------
Id

Order_Status
--------------
Id
OrderId
Description
DateTimeStatus

我需要检索以下结果:OrderId以及最新状态的描述和时间戳。

通常我会做这样的事情:

SELECT
    o.Id,
    st.Description,
    st.DateTimeStatus
FROM Order o
JOIN OrderStatus st ON
    st.OrderId = o.id
    AND
    st.DateTimeStatus = (
        SELECT MAX(st1.DateTimeStatus)
        FROM OrderStatus st1
        WHERE st1.OrderId = o.Id
    )

但是我不认为这是最美的方式,也不是最高性能的方式,它正在考虑更大的查询(而且如果不限制子查询的结果,这是不安全的)。

我还可以简单地加入两个表,以降序方式对st.DateTimeStatus进行排序,并将结果限制为1。

好吧..还有更好的方法吗?

我研究了类似的问题,但没有找到与我想知道的东西类似的东西:最佳方法。


阅读 185

收藏
2021-07-01

共1个答案

admin

I could also simply join the two tables, ordering in descencing way the st.DateTimeStatus and limiting the result to 1.

我认为您很难找到比这更有效的选择。

2021-07-01