如何在 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
我有 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