SQL:获取子字符串中的最大ID行

SQL:获取子字符串中的最大ID行,sql,max,greatest-n-per-group,Sql,Max,Greatest N Per Group,这是我第一次求助,大部分时间我都能从谷歌搜索中找到StackOverflow的答案,但这次我似乎找不到答案,或者不完全理解已经存在的amswers 我有两张桌子 表1=T1 Columns ID1, ID2, TITLE Value 1, D1, TITLE1 2, D2, TITLE2 3, D3, TITLE3 ..... 表2=T2 Columns ID1, Rev, CODE Value 1, 1, V1

这是我第一次求助,大部分时间我都能从谷歌搜索中找到StackOverflow的答案,但这次我似乎找不到答案,或者不完全理解已经存在的amswers

我有两张桌子

表1=T1

Columns ID1, ID2, TITLE
Value    1, D1, TITLE1
         2, D2, TITLE2
         3, D3, TITLE3
         .....
表2=T2

Columns ID1, Rev, CODE
Value    1, 1, V1
         1, 2, V2
         1, 3, V3
         1, 4, V4
         2, 1, V5
         2, 2, V6
         2, 3, V7
         3, 1, V8
理想情况下,我想从T2返回Rev的最大值,从T1返回ID2列。所以结果应该是这样的

Columns T1.ID2, T1.TITLE, T2.REV, T2.CODE
            D1, TITLE1, 4, V4 
            D2, TITLE2, 3, V6
            D3, TITLE3, 1, V8
这是我的尝试,总的来说,我认为我走的是正确的道路,但它可能是一些混乱的语法

SELECT T1.ID2, T1.TITLE, 
        SUBSTRING(

                SELECT MAX(T2.REV)
                FROM  T2 T2B
                WHERE T2B.ID1 = T1.ID1)
                AS MAXREV, 
    T2.CODE
FROM T1, T2
WHERE T1.ID1 = T2.ID1
ORDER BY 1, 2 DESC
如有任何建议,将不胜感激

干杯。

此解决方案使用特定于T-SQL(MS SQL Server)的语法,事实上它只适用于SQL Server 2008及更高版本

对于一个MySQL解决方案,我刚刚在这里发布了一个使用相同技术的解决方案:这里有关于此方法的指导:

T-SQL解决方案是(包括设置表变量):

这将返回:

id2 title   rev code
D1  TITLE1  4   V4
D2  TITLE2  3   V7
D3  TITLE3  1   V8
不过,较长的答案是,在不同风格的SQL中,如何获得这个row_number()功能存在很大的差异。总体策略是为要保留的行获取一个以1开头的行号(在每个类别上分区),然后查询出那些rowid=1行


子查询(这里是CTE)在每次查询运行时只运行一次,而不是每行运行一次,因此从性能角度看,它们不会造成太大的负担。

您使用的是哪种查询?博士后?Oracle?哪种SQL语言?MySQL?T-SQL?如果您使用的是TSQL,则应给出针对此特定问题所需的结果(您可以保证只有一行是最大值),这是更好的解决方案。我跳进了深渊;)除了
@t1
表名之外,这几乎是标准的SQL,可用于任何现代DBMS。
 with maxt2 as 
(
 select id1,max(rev) as maxrev
 from t2
 group by id1
)
select t1.id2,t1.title,maxt2.maxrev
from maxt2 m join t1 t 
on m.id1=t.id1
order by 1,2 desc 
 with maxt2 as 
(
 select id1,max(rev) as maxrev
 from t2
 group by id1
)
select t1.id2,t1.title,maxt2.maxrev
from maxt2 m join t1 t 
on m.id1=t.id1
order by 1,2 desc