首页 > 解决方案 > 连接来自不同数据库的表只添加最近的日期 SQL

问题描述

我正在加入大量数据来处理动态/复杂查询。以下只是我正在做的一部分。我找到了一个解决方案,然后我想我对其进行了调整并丢失了它。

数据库结构:

phpMyAdmin
|
|-oath
|    -users
|    -users_meta
|    -users_jobs
|
|-order
|    -orders
|    -carts
|    -driver_status

oauth.users

id | foo | baa
--------------
1  | x   | x 
2  | x   | x 
3  | x   | x 
4  | x   | x 
5  | x   | x 

order.orders(我知道命名不好,我没有创建数据库)

(customer_id = user.id)

id|order_date| customer_id| ray
-------------------------------
1 | 10/11/21 |     1      | x 
2 | 10/11/21 |     1      | x 
3 | 09/11/21 |     1      | x 
4 | 12/11/21 |     1      | x 
5 | 10/11/21 |     2      | x 
6 | 12/11/21 |     2      | x 
7 | 14/11/21 |     2      | x 

我只想加入最近的日期

id | foo | baa |order_date| baa
--------------------------------
1  |  x  |  x  | 12/11/21 | x 
2  |  x  |  x  | 14/11/21 | x 

这是我的查询,但出了点问题。Apologize Sql 不是我的强项,结果显示了多个具有不同订单日期的相同用户。如果有多个最近的 order_date,那么就会有多个条目。

SELECT
    *
FROM
    oauth.users u
LEFT JOIN order.orders o
ON
    o.customer_id = u.id
LEFT JOIN(
    SELECT
        customer_id,
        MAX(order_date) order_date
    FROM order.orders o2
    GROUP BY
        customer_id
) SubQ
ON
    SubQ.customer_id = o.customer_id AND SubQ.order_date = o.order_date

我正在使用 phpMyAdmin,我认为它使用 Mysql / mariasql

标签: mysqlsqlmariadb

解决方案


你可以这样做

SELECT
    *
FROM oauth.users oa
LEFT JOIN (SELECT oo.customer_id, oo.order_date  FROM order.orders oo
INNER  JOIN (
    SELECT
        customer_id,
        MAX(`order_date`) order_date
    FROM order.orders o2
    GROUP BY
        customer_id
) oo2 ON oo.customer_id = oo2.customer_id AND oo2.order_date = oo.order_date) t1
ON
    t1.customer_id = oa.id

参见示例http://sqlfiddle.com/#!9/4c6bbca/12


推荐阅读