MySQL INNER JOIN 从第二个表中只选择一行

标签 mysql sql select inner-join

我有一个 users 表和一个 payments 表,对于每个有付款的用户,可能在 payments表。我想选择所有有付款的用户,但只选择他们最近一次付款。我正在尝试这个 SQL,但我以前从未尝试过嵌套 SQL 语句,所以我想知道我做错了什么。感谢帮助

SELECT u.* 
FROM users AS u
    INNER JOIN (
        SELECT p.*
        FROM payments AS p
        ORDER BY date DESC
        LIMIT 1
    )
    ON p.user_id = u.id
WHERE u.package = 1

最佳答案

您需要有一个子查询来获取每个用户 ID 的最新日期。

SELECT  a.*, c.*
FROM users a 
    INNER JOIN payments c
        ON a.id = c.user_ID
    INNER JOIN
    (
        SELECT user_ID, MAX(date) maxDate
        FROM payments
        GROUP BY user_ID
    ) b ON c.user_ID = b.user_ID AND
            c.date = b.maxDate
WHERE a.package = 1

关于MySQL INNER JOIN 从第二个表中只选择一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12526194/

相关文章:

mysql - 更新多行 - 生成的 SQL 中有错误?

mysql - 查询两个表,其中一行与另一行相似

sql - SAS - 使用类似的子选择

mysql - 没有子查询的最新数据分组

sql - PostgreSQL如何获取同一列多个值的最新记录?

Python:元组/字典作为键、选择、排序

mysql - 在 Ja-sig CAS 中使用 MySQL 数据库进行身份验证

php - 将 NULL 插入具有 Varchar 数据类型的列

php - SQL:插入$_POST并输出JSON

sql - 我如何调整此查询以生成显示随时间推移按月计算平均值的结果