求查询sql??帮助!

现在有一个设备表TBL_DEVICE_INFO与设备历史记录表TBL_CONFMGR_DEVICEHISTORY,一个设备表TBL_DEVICE_INFO对应多个设备历史记录TBL_CONFMGR_DEVICEHISTORY。
SELECT NEDN, NENAME, SYSNAME, NECATEGORY, NETYPE, NEVENDORNAME, NEIP, NEMASK, NEMAC, VERSION, NEPATCHVERSION, NESYSOID, NEEXTENATTR, NESTATE, LASTPOLLTIME
FROM DBSNMP.TBL_DEVICE_INFO(设备表)

SELECT DEVICEHISTORYID, NEDN, FILENAME, BACKTIME, BASELINEFLAG, RESULT, RUNDATE, TASKNAME, BACKTYPE
FROM DBSNMP.TBL_CONFMGR_DEVICEHISTORY(设备历史记录表)
这两个表关联d.NEDN=i.NEDN
现在要求查询所有设备最近备份历史记录,sql怎么写?

[quote]我只想要每个设备最近备份的一个记录信息,其它备份历史信息不要查询出来! [/quote]

下边这个应该符合你的要求:
[code="java"]select d.NEDN,
dh.BACKTIME,
dh.FILENAME,
dh.BACKTIME,
dh.BASELINEFLAG,
dh.RUNDATE,
dh.TASKNAME,
dh.BACKTYPE
from DBSNMP.TBL_DEVICE_INFO d,
DBSNMP.TBL_CONFMGR_DEVICEHISTORY dh
where d.NEDN = dh.NEDN
and rownum = 1
group by d.NEDN;
dh.FILENAME, dh.BACKTIME, dh.BASELINEFLAG, dh.RUNDATE, dh.TASKNAME, dh.BACKTYPE order by dh.BACKTIME[/code]

注:如果楼主用的是oracle 在where 中这样写 rownum = 1 ;如果不是,你可以查询在其它数据中获取第一行的方法。

设备表和记录表关联,按备份时间来限制不就可以了?

select * from TBL_DEVICE_INFO d,TBL_CONFMGR_DEVICEHISTORY i
where d.NEDN=i.NEDN and BACKTIME > starttime and BACKTIME < endtime

请试试下边的这个,看是否符合你的要求:

[code="sql"]select d.NEDN,
FILENAME,
BACKTIME,
BASELINEFLAG,
RUNDATE,
TASKNAME,
BACKTYPE
from DBSNMP.TBL_DEVICE_INFO d,
DBSNMP.TBL_CONFMGR_DEVICEHISTORY dh
where d.NEDN = dh.NEDN
group by d.NEDN;
dh.FILENAME, dh.BACKTIME, dh.BASELINEFLAG, dh.RUNDATE, dh.TASKNAME, dh.BACKTYPE[/code]

如果你只需要最近的历史记录,你可以设定一个时间段,然后再where条件中加入即可

记录表
先使用关联字段分组 查处记录索引 (Select NEDN, max(ID) from 记录表 group by NEDN ) AS newObj
这里先 假设是id递增的
获得id 和 NEDN 的obj 就是你要的东东了
:D
第一 有NEDN可以去找设备 第二 有设备记录id可以找到 设备记录
可以分多次查 也可以直接把这个组装到你的查询语句中去 ,,, 问题搞定

我只想要每个设备最近备份的一个记录信息,其它备份历史信息不要查询出来!

按时间排个序,group by 设备,取第一条数据就行了。oracle里面有rowid

select d.NEDN,

FILENAME,

BACKTIME,

BASELINEFLAG,

RUNDATE,

TASKNAME,

BACKTYPE

from DBSNMP.TBL_DEVICE_INFO d,

DBSNMP.TBL_CONFMGR_DEVICEHISTORY dh

where d.NEDN = dh.NEDN

and dh.id in (select max(id) from
DBSNMP.TBL_DEVICE_INFO group by NEDN)

应该是按时间降序排序的吧,那需要加上desc

代码如下:

[code="java"]select d.NEDN,
dh.BACKTIME,
dh.FILENAME,
dh.BACKTIME,
dh.BASELINEFLAG,
dh.RUNDATE,
dh.TASKNAME,
dh.BACKTYPE
from DBSNMP.TBL_DEVICE_INFO d,
DBSNMP.TBL_CONFMGR_DEVICEHISTORY dh
where d.NEDN = dh.NEDN
and rownum = 1
group by d.NEDN;
dh.FILENAME, dh.BACKTIME, dh.BASELINEFLAG, dh.RUNDATE, dh.TASKNAME, dh.BACKTYPE order by dh.BACKTIME desc[/code]

[code="sql"]
SELECT d.*, c.*
FROM DBSNMP.TBL_DEVICE_INFO d LEFT JOIN (SELECT * FROM DBSNMP.TBL_CONFMGR_DEVICEHISTORY WHERE DEVICEHISTORYID =(SELECT MAX(DEVICEHISTORYID) FROM DBSNMP.TBL_CONFMGR_DEVICEHISTORY GROUP BY NEDN) c ON d.NEDN=c.NEDN
[/code]

[code="java"]
select d.NEDN,

dh.BACKTIME,

dh.FILENAME,
dh.BASELINEFLAG,

dh.RUNDATE,

dh.TASKNAME,

dh.BACKTYPE,
max(dh.BACKTIME)
from DBSNMP.TBL_DEVICE_INFO d,

DBSNMP.TBL_CONFMGR_DEVICEHISTORY dh

where d.NEDN = dh.NEDN
group by d.NEDN;

dh.BACKTIME,dh.FILENAME,dh.BASELINEFLAG,dh.RUNDATE,dh.TASKNAME,

dh.BACKTYPE,
order by d.NEDN
[/code]
这个应该行吧,实在不行你嵌套一下就OK了