从 table 中获取由 MAX(Column1) 过滤的所有字段

Getting all fields from table filtered by MAX(Column1)

我有 table 一些数据,例如

ID Specified TIN Value
----------------------
1       0   tin1   45
2       1   tin1   34
3       0   tin2   23
4       3   tin2   47
5       3   tin2   12

我需要通过 MAX(Specified) 列获取包含所有字段的行。如果我的 MAX 列很少(例如 ID 4 和 5),我必须取最后一个(ID 5) 最后结果必须是

ID Specified TIN Value
-----------------------    
2       1   tin1   34
5       3   tin2   12

编辑:问题编辑后更新了查询。 这是 fiddle

http://sqlfiddle.com/#!9/20e1b/1/0

 SELECT * FROM TBL WHERE ID IN (
 SELECT max(id)  FROM 
 TBL WHERE SPECIFIED IN 
    (SELECT MAX(SPECIFIED) FROM TBL
     GROUP BY TIN)
 group by specified)

我相信我们可以进一步简化它,但这会奏效。

select * from tbl where id =(
SELECT MAX(ID) FROM 
tbl where specified =(SELECT MAX(SPECIFIED) FROM tbl))

这将通过使用 window 函数给出期望的结果:

;with cte as(select *, row_number(partition by tin order by specified desc, id desc) as rn
             from tablename)
select * from cte where rn = 1

一种方法是使用window函数,row_number():

select t.*
from (select t.*, row_number() over (partition by tim
                                     order by specified desc, id desc
                                    ) as seqnum
      from t
     ) t
where seqnum = 1;

但是,如果您在 tin, specified idid 上有索引,最有效的方法是:

select t.*
from t
where t.id = (select top 1 t2.id
              from t t2
              where t2.tin = t.tin 
              order by t2.specified desc, id desc
             );

这样更好的原因是索引将用于子查询。然后索引也将用于外部查询。这是非常有效的。尽管索引将用于 window 函数;生成的执行计划可能需要扫描整个 table.