mysql中使用min(date)后如何返回同一行的数据

问题描述 投票:0回答:1
select customer_id, min(order_date) as first_date, customer_pref_delivery_date
from Delivery
group by customer_id
ORDER BY customer_id;

这是输入表

Delivery
:

送货_id 客户 ID 订单_日期 客户偏好_交货_日期
1 1 2019-08-01 2019-08-02
2 2 2019-08-02 2019-08-02
3 1 2019-08-11 2019-08-12
4 3 2019-08-24 2019-08-24
5 3 2019-08-21 2019-08-22
6 2 2019-08-11 2019-08-13
7 4 2019-08-09 2019-08-09

这是我的结果:

客户 ID 第一个日期 客户偏好_交货_日期
1 2019-08-01 2019-08-02
2 2019-08-02 2019-08-02
3 2019-08-21 2019-08-24
4 2019-08-09 2019-08-09

这是预期结果:

客户 ID 第一个日期 客户偏好_交货_日期
1 2019-08-01 2019-08-02
2 2019-08-02 2019-08-02
3 2019-08-21 2019-08-22
4 2019-08-09 2019-08-09

您能帮我解释一下,当 order_date 为 2019-08-24 时,为什么客户 3 的 customer_pref_delivery_date 位于不同的行中?即使我将其设置为 min(order_date) 并且我认为 SQL 会从同一行返回 customer_pref_delivery_date 。为什么不是这种情况以及如何解决这个问题?

非常感谢!

见上文!非常感谢!

sql mysqli
1个回答
0
投票

一种选择是使用

CTE
获取每个 customer_id 的
MIN(order_date)
,然后使用外部查询添加其他列:

WITH minData AS
  (SELECT customer_id, MIN(order_date) AS order_date
   FROM Delivery
   GROUP BY customer_id)
SELECT
  customer_id, 
  order_date AS first_date, 
  customer_pref_delivery_date 
FROM Delivery
WHERE
  (customer_id, order_date) IN 
    (SELECT customer_id, order_date FROM minData);

IN
子句(您也可以使用
INNER JOIN
代替)确保仅获取相关行。

这是一个基于您的数据的样本小提琴

© www.soinside.com 2019 - 2024. All rights reserved.