如何在 mysql 中找到上次订购的用户?

How to find last ordered user in mysql?

我有 2 table 个“用户”和“订单”。

用户:

userid   apartment_id   blockid  flat_id
1002             2           3       101
1004             1           4       102 
1005             2           3       101

订单:

orderid   userid   order_date
10         1002    2020-07-11
11         1004    2020-08-13  
12         1005    2020-09-11

现在我想要以下内容:

apartment_id    blockid    flat_id   no_of_users  last_order_date   last_order_user_id
    2              3         101        2            2020-09-11          1005

我已经写了 SQL 来查找除“last_order_user_id”之外的所有这些。有人可以帮我吗?这是我目前所拥有的:

SELECT apartment_id,blockid,flat_id,COUNT(DISTINCT u.userid) AS users,MAX(o.order_date) AS Last_order_on FROM users u LEFT JOIN orders o ON u.user_id=o.user_id GROUP BY apartment_id,blockid,flat_no;

我曾尝试将 o.userid 添加到 select 语句中的字段列表,但由于订单 table 是按 order_date 升序排列的,因此返回第一个订购的用户 ID。

任何建议都会很有帮助。

您需要计算出每个apartment/block/flat组合的最大订购日期;然后您可以将其连接回订单和用户表以查找发出最后订单的用户:

SELECT u.apartment_id, u.blockid, u.flat_id,
       m.no_of_users,       
       m.last_order_date,
       u.user_id AS last_order_user_id
FROM users u 
JOIN orders o ON u.user_id = o.user_id
JOIN (
  SELECT apartment_id, blockid, flat_id,
         COUNT(DISTINCT u.user_id) AS no_of_users,
         MAX(o.order_date) AS last_order_date
  FROM users u
  JOIN orders o ON u.user_id = o.user_id
  GROUP BY apartment_id, blockid, flat_id
) m ON m.apartment_id = u.apartment_id
   AND m.blockid = u.blockid
   AND m.flat_id = u.flat_id
   AND m.last_order_date = o.order_date

输出:

apartment_id    blockid     flat_id     no_of_users     last_order_date     last_order_user_id
1               4           102         1               2020-08-13          1004
2               3           101         2               2020-09-11          1005

Demo on SQLFiddle