表结构如下:
a b c
s1 d3 0
s1 d1 2
s1 d2 3
s2 d3 0
s2 d1 1
s2 d4 2
s2 d5 7
s2 d6 8
s3 d3 1
s3 d1 1
s3 d2 2
s3 d4 0.5
s3 d5 0.5
s3 d7 8
s3 d9 12
先按照字段a分组,再取每组中c字段的前两条最小的纪录,也就是说,
对s1组,应该取
s1 d3 0
s1 d1 2
因为这两条的c字段纪录值最小.
对s2组,本应该取
s2 d3 0
s2 d1 1
但是因为字段b的d3, d1已经在s1组中出现过,
所以只能取
s2 d4 2
s2 d5 7
同样对s3组,本该取
s3 d4 0.5
s3 d5 0.5
但是d1,d3,d4,d5都在前面的两组中出现了,所以只能取两个最小的c字段值.
s3 d2 2
s3 d7 8
用了下面的SQL ,
Select *
From test A
Where (Select Count(*)
From test
Where a = A.a And c< A.c) < 2
Order By a, c
只能实现取每组前两个最小的c纪录值.
请问如何实现b字段已经出现在其他组中就不参与分组排序的PROC SQL,
想用宏来实现出现过就删除, 但不知道大家有没有好的办法?
请高手帮忙,多谢



雷达卡





京公网安备 11010802022788号







