首页 > 解决方案 > 仅由内部联接 SQL 中的 no_member 显示列表数据事务 MAX(transaction_id)

问题描述

我将 select 与 MAX 一起使用但无效,简单来说,我与 no_member 有数据事务相关

select a.no_member, b.trans_value, b.trans_id 
from table1 a 
inner join table2 b 
on a.no_member=b.no_member
order by a.no_member;

节目

no_member       trans_value      trans_id
 111             100000           1
 111             200000           2
 111             300000           3
 222             150000           1
 222             200000           2
 333             300000           1
 333             100000           2
 333             500000           3
 333             100000           4 

就我而言,我只想为每个 no_member 显示 max(b.trans_id)

no_member       trans_value      trans_id
 111             300000           3
 222             200000           2
 333             100000           4 

需要建议,谢谢

标签: sqlsql-server

解决方案


看来 table1 是不需要的。

select top 1 (with ties) b.* 
from table2 b
order by dense_rank() over (partition by b.no_member order by b.trans_value desc) asc

术后评论编辑:当我想要最高/最低/等时,我通常喜欢使用两种查询“样式”。每一行的内容,您可以在链接中找到您的问题已被标记为重复的内容(此页面顶部的链接)。

第一个,是我在这里写的,select top 1 with ties。这是 Josh Gilfillan 在重复链接中的回答,当您只有一张桌子时它很有用。

如果您有 2 个以上的表,那么答案应该是cross apply ( select top 1,就像 ddp 的答案一样。在你的情况下,这将是这样的:

select (some columns),q.trans_value,q.trans_id
from
    (some tables and joins)
    cross apply
    (
        select top 1 b.trans_value,b.trans_id
        from table2 b
        where b.no_member=a.no_member -- Here you add all "join conditions" with the external tables
        order by b.trans_value desc,b.trans_id asc -- what if two transactions have same value?
    )as q

推荐阅读