【问题标题】:SQL Max Function per group每组 SQL 最大函数
【发布时间】:2011-04-04 19:46:48
【问题描述】:

我有一个复杂的查询,每组可能返回多条记录。有一个字段有一个数字序号。如果在一个组中返回多个记录,我只想要具有最高序号的记录。

我尝试过使用 SQL MAX 函数,但如果我尝试添加多个字段,它会返回所有记录,而不是该组中具有最高顺序字段的记录。

我正在尝试在 MS Access 中完成此操作。


编辑:2011 年 4 月 5 日 尝试创建一个表作为我正在尝试做的示例

我有下表:

tblItemTrans

物品ID(PK)
事件eq(PK)
项目类型ID
用户名

Eventseq 是一个数字字段,每个 ItemID 都会递增。 (不要问我为什么,表就是这样创建的。)每个 ItemID 可以有一个或多个 Evenseq。我只需要每个 ItemTypeID 的最后一条记录 (max(Eventseq))。

希望这对任何人都有帮助。

【问题讨论】:

  • 发布你的sql,你会得到更好的反馈。

标签: sql ms-access


【解决方案1】:
SELECT A.*
FROM YourTable A
INNER JOIN (SELECT GroupColumn, MAX(SequentialColumn) MaxSeq
            FROM YourTable
            GROUP BY GroupColumn) B
ON A.GroupColumn = B.GroupColumn AND A.SequentialColumn = B.MaxSeq

【讨论】:

    【解决方案2】:

    如果您的 SequentialNumber 是一个 ID(在整个表格中是唯一的),那么您可以使用

    select *
    from tbl
    where seqnum in (
        select max(seqnum) from tbl
        group by groupcolumn)
    

    如果不是,Lamak 查询的替代方法是访问域函数 DMAX

    select *
    from tbl
    where seqnum = DMAX("seqnum", "tbl", "groupcolumn='" & groupcolumn & "'")
    

    注意:如果groupcolumn是日期,上面用#代替单引号',如果是数字,去掉单引号。

    【讨论】:

    • 该表有两个主键,一个是序号字段。尝试了 DMAX 选项,但它根本没有返回任何内容。
    • @Rick / 对于 DMAX,这 3 个部分需要具有正确的列名、表名和组列名。
    • dmax 指令本身似乎正在工作。我在 VBA 中进行了测试,它返回字段 seqnum 的最大值。我的猜测是,由于返回的值是所有表中的最高值,因此在组中找不到该值。
    • @Rick / 这就是为什么有第三部分,条件groupcolumn=<currentgroup> 找到该组的最大值
    • 好的,我省略了第二个字段作为顶部的编辑。我尝试使用参数。到目前为止似乎工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2022-11-13
    • 2021-12-04
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多