mysql - 仅选择不同的 'names' 并按其 'newest date' 对它们进行排序

标签 mysql sql join inner-join

我使用 MySQL 数据库来管理组织的捐赠。捐赠者可以进行多次捐赠。因此我有两个表:donators 包含有关捐赠者的信息,donations 包含有关捐赠时间和金额的信息。两个表都通过 donatorID 连接。

我想读出每个不同捐赠者的信息。该列表应按最后一次捐赠的日期排序。我想出了下面的代码,但是它使用了第一次捐赠的日期而不是最后一次捐赠的日期。

我如何使用每个捐赠者的最新捐赠日期?

SELECT
    DISTINCT(`donators`.`name`),
    `donators`.`city`,
    `donators`.`country`,
    `donators`.`website`
FROM
    `donators`
INNER JOIN
    `donations`
ON
    `donators`.`donatorID` = `donations`.`donatorID`
ORDER BY `donations`.`date` DESC

最佳答案

SELECT  a.*, b.max_DATE
FROM    Donators a
        INNER JOIN
        (
            SELECT  DonatorID, MAX(date) max_DATE
            FROM    Donations
            GROUP   BY DonatorID
        ) b ON a.DonatorID = b.DonatorID
ORDER   BY  b.max_DATE DESC 

如果你想让donation表的记录根据最近的捐赠日期显示,

SELECT  a.*, c.*
FROM    Donators a
        INNER JOIN Donations c
            ON a.DonatorID = c.DonatorID
        INNER JOIN
        (
            SELECT  DonatorID, MAX(date) max_DATE
            FROM    Donations
            GROUP   BY DonatorID
        ) b ON  c.DonatorID = b.DonatorID AND
                c.date = b.max_DATE
ORDER   BY c.date DESC  

关于mysql - 仅选择不同的 'names' 并按其 'newest date' 对它们进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14414550/

相关文章:

mysql - CodeIgniter - Active Record 加入

mysql - phpMyAdmin 阻止对单个数据库的访问

sql - SQL引擎按什么顺序执行查询和子查询?

mysql - 多个表的多个内连接

mysql - 如何用一个查询获取两个 select join 语句的结果

mysql - 连接和计算问题

MySQL连接同一个表以列方式显示行(复杂)

javascript - Sequelize,使用 React 删除多行

php - 此版本的 MySQL 尚不支持 'LIMIT & IN/ALL/ANY/SOME 子查询

sql - redshift 上 array_agg() 或 string_agg() 的替代方案