说我有桌子t1:
c1 | c2 | c3| c4
1 1 1 A
1 1 2 B
1 1 3 C
1 1 4 D
1 1 4 E
1 1 4 F
2 2 1 A
2 2 2 A
2 2 3 A
我想为每个具有最大c3的c1,c2对选择行。问题是,如果我为每个c1执行了最大值(c3),那么将选择哪一行,c2然后自己加入到原始表中?它只是随机选择c3 = 4的三行中的一行吗?
答案 0 :(得分:0)
您可能不需要加入:
select c1,c2,c3,maxc3 from (
SELECT c1,c2, c3,MAX(c3) OVER () as maxc3
FROM @temp
GROUP BY c1,c2,c3
) a
where c3 = maxc3
答案 1 :(得分:0)
全部取决于join子句 - 如果你得到MAX(c3)
而JOIN
返回结果:
c1
和c2
加入,则会有3行。c1
,c2
和c3
加入 - 您将有1行。答案 2 :(得分:0)
如果我为每个c1执行max(c3),那么将选择哪一行,c2然后 自我加入了原始表?
=>答案是,将选择与max(c3)
值匹配的所有行。
是否只是随机选择c3 = 4的三行中的一行?
=>不,和上面一样。将返回与您的自我加入表中的列max(c3)
匹配的c3
(,例如您的c1
,c2
值为1将返回3行,因为它在三行中的最大值为4)。要限制c3
上的自我加入,您可能还需要加入c1
和c2
列。
select t1.*
from table1 t1
join
(
select
c1,
c2,
max(c3) as c3
from table1
group by c1,c2
) t on t.c1 = t1.c1
and t.c2 = t1.c2
and t.c3 = t1.c3
order by t.c1,t.c2