在MSSSQL2000中,如何实现如下查询:
字段1 字段2 字段2
A 1 20
A 2 30
A 3 30 B 3 20
B 1 30
B 2 30结果:
A 3 30
B 2 30说明:
1. 按 字段1 取 字段3的值是最大值的行(会有多行)
2. 然后,再取 字段2 值是最大的行。我现在的做法是:
select a.字段1,a.字段3,max(b.字段2) 字段2
from(
select 字段1,max(字段3) 字段3
from 表1
group by 字段1
)a
join 表1 b on a.字段1=b.字段1 and a.字段3=b.字段3请问,有没有效率比较高的查询?
因为我实际的查询比较复杂,表1是个比较复杂子查询,若是按上面的方式会很慢,上面只是为了说明问题。
请问如何实现?
谢谢
字段1 字段2 字段2
A 1 20
A 2 30
A 3 30 B 3 20
B 1 30
B 2 30结果:
A 3 30
B 2 30说明:
1. 按 字段1 取 字段3的值是最大值的行(会有多行)
2. 然后,再取 字段2 值是最大的行。我现在的做法是:
select a.字段1,a.字段3,max(b.字段2) 字段2
from(
select 字段1,max(字段3) 字段3
from 表1
group by 字段1
)a
join 表1 b on a.字段1=b.字段1 and a.字段3=b.字段3请问,有没有效率比较高的查询?
因为我实际的查询比较复杂,表1是个比较复杂子查询,若是按上面的方式会很慢,上面只是为了说明问题。
请问如何实现?
谢谢
with tb as
(
select 字段1,max(字段3) as 字段3 from 表1
group by 字段1
)
select 字段1,字段3,b.字段2
from tb
inner join 表1 b on tb.字段1=b.字段1 and tb.字段3=b.字段3思路是一样的。
group by 字段1
另:3楼虽然肯定错,但也提供个思路。
我写个看看速度(不过这样写有个前提,字段2数字不会过大(我这里是不超10000就可以))
select 字段1
,cast(right(cast(10000*字段3+字段2 as varchar(50)),4) as int) 字段2
,max(字段3) 字段3
from 表1
group by 字段1
select 字段1
,cast(right(cast(max(10000*字段3+字段2) as varchar(50)),4) as int) 字段2
,max(字段3) 字段3
from 表1
group by 字段1
select 字段1,max(字段3),right(max(cast(字段3 as char(10) +cast(字段2 as char(10)),10) as 字段3
from 表1
group by 字段1我先试试看 ,谢谢各位先