在 GROUP BY 中选择具有最大日期的整行

Posted

技术标签:

【中文标题】在 GROUP BY 中选择具有最大日期的整行【英文标题】:SELECT entire rows with max date in a GROUP BY 【发布时间】:2018-03-21 00:16:12 【问题描述】:

我知道以前有人问过这个问题,但我看到的答案从未考虑过日期完全相同的情况。

我有下面的汇款表格。

我需要每组CORPORATION + ACCOUNT

的最新转账的TRANSFER_ID

这是我当前的查询:

SELECT  tt.transfer_id,
        tt.corporation,
        tt.account,
        tt.date
    FROM Transfers tt INNER JOIN
        (SELECT t.corporation, 
                t.account, 
                MAX(t.date) AS day_last_transfer
            FROM Transfers t
        GROUP BY t.corporation, t.account) j
    ON  tt.corporation = j.corporation
    AND tt.account = j.account
    AND tt.date = j.day_last_transfer

问题是,由于日期完全相同,在执行 inner join 时,有时我会为相同的 CORPORATION + ACCOUNT 获得 2 或 3 条不同 transfer_id 的记录.

最后,我必须使用 MS ACCESS 来执行这个查询

【问题讨论】:

请添加一些示例记录,以显示不希望的行为,以及这些记录的预期结果。 How to ask a good SQL question. 不能依赖每个公司/帐户的最大 transfer_id(按 alpha 排序)是最新的吗? 【参考方案1】:

然后选择Max(或Min)id:

SELECT 
    Max(tt.transfer_id) As last_transfer_id,
    tt.corporation,
    tt.account,
    tt.date
FROM 
    Transfers tt 
INNER JOIN
    (SELECT t.corporation, 
        t.account, 
        MAX(t.date) AS day_last_transfer
    FROM Transfers t
    GROUP BY t.corporation, t.account) j
    ON  tt.corporation = j.corporation
    AND tt.account = j.account
    AND tt.date = j.day_last_transfer

GROUP BY
    tt.corporation,
    tt.account,
    tt.date

【讨论】:

以上是关于在 GROUP BY 中选择具有最大日期的整行的主要内容,如果未能解决你的问题,请参考以下文章

SQL选择GROUP BY中具有最大值的完整行

SqlAlchemy group_by 并返回最大日期

SQL group by:选择另一列有其最小值/最大值的值

以编程方式选择 DataGridView 中的整行(不使用 ...Rows[].Selected)

我们如何在具有GROUP BY子句的查询中选择非聚合列,而GROUP BY子句在功能上不依赖于GROUP BY子句中的列?

从 GROUP BY 组中选择具有特定内容的行