gpt4 book ai didi

sql - 基本 SQL 子查询

转载 作者:行者123 更新时间:2023-12-02 14:25:48 27 4
gpt4 key购买 nike

我正在开发一个项目,我应该在 MS Access 中提取所有客户上次订单的前 2 个日期。如果只有一个日期,它也应该提取该单个日期。

SELECT Customer_t.Customer_ID, 
Customer_t.Customer_Name,
Order_t.Order_ID,
Order_t.Order_Date
FROM Customer_t
INNER JOIN Order_t
ON Customer_t.Customer_ID = Order_t.Customer_ID
WHERE (((Customer_t.Customer_ID)=[Order_t].[Customer_ID]))

我是个新手,但我很难理解当前网络上发布的子查询信息。

我知道我正在尝试使用 TOP 2 语句,但我继续收到语法错误或语句,这些错误或语句表明我最多可以提取一项

如有任何帮助,我们将不胜感激。我已经看到过类似的问题,但我无法重复答案的建议

最佳答案

这种类型的查询在 MS Access 中有点棘手。您无法通过JOIN轻松完成您想要的事情。相反,请将其视为过滤。您只想保留每个客户的两个最新订单 ID。

这表明有一个相关子查询:

SELECT c.Customer_ID,  c.Customer_Name, o.Order_ID, o.Order_Date
FROM Customer_t as c INNER JOIN
Order_t as o
ON c.Customer_ID = o.Customer_ID
WHERE c.Order_ID IN (SELECT TOP 2 o2.Order_Id
FROM Order_t as o2
WHERE o2.Customer_Id = o.Customer_Id
ORDER BY o2.Order_Date, o2.Order_Id
);

我在 ORDER BY 中包含 Order_id,因此每一行都有一个唯一的键。在 MS Access 中,TOP 确实是 TOP WITH TIES,因此如果您确实想要最多 2 行,最好添加一个唯一键。

关于sql - 基本 SQL 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43130889/

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