gpt4 book ai didi

sql - 编写查询以从集合中获取最新项目的最有效方法是什么?

转载 作者:行者123 更新时间:2023-11-29 15:08:26 25 4
gpt4 key购买 nike

对不起,这个标题。这是我能想到的最好的办法了。

无论如何,这是我的问题 - 我有 2 个表,一个客户表和一个订单表,如下所示:

Customer {
Long id;
String name;
String address;
Timestamp createdOn;
}

Order {
Long id;
String productName;
Long customerId;
Timestamp createdOn;
}

客户与订单之间存在一对多关系,即一个客户可以拥有多个由“customerId”标识的订单。

现在这是我的问题。我希望检索所有客户及其最新订单的列表。根据上表,这是我到目前为止所能想到的:

SELECT *
FROM CUSTOMER AS CUSTOMERS
INNER JOIN (
SELECT *
FROM ORDER AS BASE_ORDERS
INNER JOIN (
SELECT MAX_ORDERS.CUSTOMERID,
MAX(MAX_ORDERS.CREATEDON)
FROM ORDER AS MAX_ORDERS
GROUP BY CUSTOMERID
) AS GROUPED_ORDERS
ON BASE_ORDERS.CUSTOMERID = GROUPED_ORDERS.CUSTOMERID
AND BASE_ORDERS.CREATEDON = GROUPED_ORDERS.CREATEDON
) AS LATEST_ORDERS
ON CUSTOMERS.ID = LATEST_ORDERS.CUSTOMERID

有更好的方法吗?我能想到的唯一其他方法是添加一个名为“isLatest”的新字段,并在每次为客户下新订单时将其设置为 true。

让我知道你的想法。

最佳答案

我发现这个变体更干净一点:

select c.*, o.*
from (
select customerid, max(createdOn) as MaxCreatedOn
from Order
group by customerid
) mo
inner join Order o on mo.customerid = o.customerid and mo.MaxCreatedOn = o.createdOn
inner join Customer c on o.customerid = c.id

关于sql - 编写查询以从集合中获取最新项目的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1457246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com