读书人

多表查询排序筛选有关问题

发布时间: 2012-03-01 10:25:47 作者: rapoo

多表查询排序筛选问题
3个表:
bumen:
-----------------------------------------
| bm | bms |
-----------------------------------------
| 01 | 生产基地 |
-----------------------------------------
| 02 | 生产部 |
-----------------------------------------
| 03 | 办公室 |
-----------------------------------------
| 04 | 资材部 |


doc:

-------------------------------
| bh | xm | xb | bm |
---------------------------------
| 010001 | aaaa | 男 | 01 |
-------------------------------
| 010002 |bbbb | 女 | 01 |
---------------------------------
| 010044 | cccc | 男 | 01 |
-------------------------
| 010045 | dddd | 女 | 01 |


| 020008 |eeee | 男 | 02 |
----------------------------
| 010031 | ffffff | 男 | 02 |
------------------------------
| 020011 | ggggg | 女 | 02 |
----------------------------
| 020012 | eeeee | 男 | 02 |
-------------------------------
| 07006 | wwwww | 女 | 07 |
----------------------------

sfdata:

-------------------------
| bh | ye | rq |
-------------------------
| 010001 | 3000 | 20041012 |
-------------------------
| 010001 | 3000 | 20041012 |


-------------------------
| 010001 | 2970 | 20041014 |
-------------------------
| 010031 | 1700 | 20050323 |
-------------------------
| 010031 | 1400 | 20050323 |
-------------------------
| 010031 | 600 | 20050331 |
-------------------------

要实现的查询是:查出xm或bh对应的ye,要求rq最大的条件下ye最小
bh | xm | xb | bms | ye | rq
010001 |aaaa |男 | 生产基地|2970 |20041014
010031 |fffff |男 | 生产部 |600 |20041014


数据量挺大的,用的ACCESS数据库,我写的SQL:

select * from (select sfdata.bh,xm,xb,bms,ye,rq from bumen,doc,sfdata where bumen.bm=doc.bm and sfdata.bh=doc.bh order by sfdata.bh asc,rq desc,ye asc)

查不来的只是按要求排序了,并没有取出来每个编号的第一条记录,请问怎样消除重复的记录?

或者有更好的方法实现呢?


[解决办法]
select * from ((select * from sfdata a where rq=
(select top 1 rq from sfdata where bh=a.bh order by rq desc)) c
left join doc d on c.bh=d.bh)
left join bumen e on d.bm=e.bm

读书人网 >Access

热点推荐