当前位置: 首页 > 知识库问答 >
问题:

从MySQL中分组和联接表的特定行中选择数据

詹杰
2023-03-14

我有两张桌子,客户和订单是内部连接的。客户可以有多个与其关联的订单。在我的选择中,我然后按客户分组。id.我需要选择每个客户的最新订单,还需要选择在该订单中花费的金额。目前,我可以选择最近的订单日期,但不知道如何选择与订单日期同一行中的金额。

这是我当前的查询:

SELECT 
    first_name, 
    last_name, 
    email, 
    MAX(order_date) AS recent_order, 
    amount -- this needs to select amount associated with recent_order
FROM customers
JOIN orders
    ON customers.id = orders.customer_id
GROUP BY customers.id;

查询选择最近日期,但不选择与最近订单日期关联的金额。

表格声明:

CREATE TABLE customers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    email VARCHAR(100)
);

CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    order_date DATE,
    amount DECIMAL(8,2),
    customer_id INT,
    FOREIGN KEY(customer_id) REFERENCES customers(id)
);

共有3个答案

笪波鸿
2023-03-14

使用以下命令:

SELECT TOP 1
    t1.first_name, 
    t1.last_name, 
    t1.email, 
    t2.order_date,
    t2.amount
FROM customers t1
JOIN orders t2
    ON t1.id = t2.customer_id
ORDER BY
    t2.order_date

通过t1添加一个分组。id如果目的是返回包含最近订单日期的所有行。如果每个订单都由订单中的一行重新提交,请忽略此项。请注意,这不会合计金额。您必须在代码中这样做,否则将使用不同的查询。还要注意,此查询的性能将受到索引配置的影响。如果order_date不是索引的一部分,并且该表包含大型数据集,则可能无法执行此查询。

司马弘益
2023-03-14
SELECT 
    first_name, 
    last_name, 
    email, 
    MAX(order_date) AS recent_order, 
    (SELECT amount FROM orders WHERE order_date = MAX(order_date) AND customers.id = orders.customer_id) as amount
FROM customers
JOIN orders
    ON customers.id = orders.customer_id
GROUP BY customers.id;

或者

SELECT 
    first_name, 
    last_name, 
    email, 
    order_date AS recent_order, 
    amount AS recent_order_amount
FROM customers
JOIN orders
    ON customers.id = orders.customer_id

GROUP BY customers.id
ORDER BY orders.order_date DESC;
商璞
2023-03-14

我建议在where子句中使用相关子查询:

SELECT c.*, o.*  -- or whatever columns you want
FROM customers c JOIN
     orders o
     ON c.id = o.customer_id
WHERE o.order_date = (SELECT max(o2.order_date)
                      FROM orders o2
                      WHERE o2.customer_id = o.customer_id
                     );

为了提高性能,您需要一个关于订单(客户id、订单日期)索引

 类似资料:
  • 问题内容: 理想情况下,我需要一个等于 但这是非法的。 我不能使用自动递增的字段。 row_number()是需要选择的行。 我该怎么办? 编辑:嗯,我使用iSql * plus进行练习,出于某些原因,使用limit和auto_increment是非法的。我最终创建了一个序列和一个触发器,并且每次输入一个条目时,ID都增加了1。 问题答案: 您可以使用代替。 如文档所述, 第一个参数指定要返回的第

  • 问题内容: 我一直在发疯,试图找出我在这里做错了什么愚蠢的事情。 我正在使用NumPy,并且我想从中选择特定的行索引和特定的列索引。这是我的问题的要点: 为什么会这样呢?我当然应该能够选择第一行,第二行和第四行以及第一列和第三列?我期望的结果是: 问题答案: 花式索引要求您提供每个维度的所有索引。您为第一个提供3个索引,为第二个仅提供2个索引,因此会出现错误。您想做这样的事情: 当然写这很痛苦,所

  • 我需要发票,invoice_details表的所有列,但我想从我的付款表中只得到一列(列名:)。我对它有什么疑问?这是我的控制器。

  • 我假设我可以做这样的事情,但这样会处理乐观锁情况吗(我通过表上的版本列使用它)

  • 本文向大家介绍从基于特定月份的MySQL表中选择数据?,包括了从基于特定月份的MySQL表中选择数据?的使用技巧和注意事项,需要的朋友参考一下 使用MySQL中的方法选择基于月份的日期。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 输出结果 这将产生以下输出- 以下是根据特定月份从表中选择数据的查询- 输出结果 这将产生以下输出-

  • 我有一个在data.table中选择行的特定问题,到目前为止还没有设法解决它。我有一个数据集,用于存储一系列参数的仿真结果。数据集中的列包含参数或结果值,请参阅下面的代码(“p”表示参数列,“v”表示值列。 我现在想提取:对于每个p1,对于给定的p2和p3值,对于p4,p5的任意值,v1的值是最小的行。设 np4 和 np5 是 p4 和 p5 的唯一值的数量,对于每个唯一的 p1 并给定 p2,