现在有两张表
过车记录表(百万条记录)
过车ID 设备编号,车道编号,图片路径,过车时间
字段(GCID,SBBH.CDBH,imgurl, GCSJ )
车道信息表 CDXX(千条记录)
(ID SBBH,CDBH) 设备编号是唯一的 一个设备下有多个车道编号
注:两张表没有建立外键现在需要 一段时间内 所有车道每个车道取一张图片, 没有记录图片留空求各位大神指点
SELECT DISTINCT sbbh, cdbh
FROM GCJL
WHERE GCSJ >= TO_DATE ('2014-01-15 08:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND GCSJ <= TO_DATE ('2014-01-15 09:00:00', 'YYYY-MM-DD HH24:MI:SS');现在只想到这样去重设备编号和车道编号 但是 去重后其他列不显示 求各位大神指点车道信息表 Left join 过车记录表 只能通过 sbbh and cdbh 会出现大于 车道信息表 条数的记录求各位大神指点求各位大神指点求各位大神指点求各位大神指点
过车记录表(百万条记录)
过车ID 设备编号,车道编号,图片路径,过车时间
字段(GCID,SBBH.CDBH,imgurl, GCSJ )
车道信息表 CDXX(千条记录)
(ID SBBH,CDBH) 设备编号是唯一的 一个设备下有多个车道编号
注:两张表没有建立外键现在需要 一段时间内 所有车道每个车道取一张图片, 没有记录图片留空求各位大神指点
SELECT DISTINCT sbbh, cdbh
FROM GCJL
WHERE GCSJ >= TO_DATE ('2014-01-15 08:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND GCSJ <= TO_DATE ('2014-01-15 09:00:00', 'YYYY-MM-DD HH24:MI:SS');现在只想到这样去重设备编号和车道编号 但是 去重后其他列不显示 求各位大神指点车道信息表 Left join 过车记录表 只能通过 sbbh and cdbh 会出现大于 车道信息表 条数的记录求各位大神指点求各位大神指点求各位大神指点求各位大神指点
SELECT distinct CDXX.SBBH,cdxx.CDBH
FROM CDXX cdxx left join GXJL gcjl
on CDXX.SBBH=gcjl.sbbh AND cdxx.CDBH = gcjl.cdbh
WHERE jgsj >= TO_DATE ('2014-01-15 08:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND jgsj <= TO_DATE ('2014-01-15 08:00:01', 'YYYY-MM-DD HH24:MI:SS')
这样又无法得到我想要的 图片路径 求解 求解
FROM CDXX cdxx left join GXJL gcjl
on CDXX.SBBH=gcjl.sbbh AND cdxx.CDBH = gcjl.cdbh
WHERE jgsj >= TO_DATE ('2014-01-15 08:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND jgsj <= TO_DATE ('2014-01-15 08:00:01', 'YYYY-MM-DD HH24:MI:SS')
group by CDXX.SBBH,cdxx.CDBH;
你就是想显示SBBH,CDBH, 然后加任意一条图片记录imgurl ?
根据lz的描述,我把设备理解成摄像头或者拍照机,lz要的是所有车道每个车道的取一张图片,那一个车道可能有多个设备拍摄照片,只要取其中一张即可。
若某个车道多个设备,有的拍到了照片有的没拍到,那就要使用row_number按照车道分区图片路径牲畜排序取第一条,也就是有图片的哪条记录,具体语句如下:
SELECT A.CDBH,DECODE(B.IMGURL,NULL,NULL,B.IMGURL) AS IMGURL
FROM CDXX A LEFT JOIN (
SELECT CDBH,IMGURL,row_number() over(partition by CDBH order by IMGURL) rn
FROM GCJL
WHERE GCSJ>=DATE1 AND GCSJ<DATE2
) b
WHERE A.SBBH=B.SBBH AND B.RN=1
GROUP BY A.CDBH
;
不知理解的对否?