现在有两张表
过车记录表(百万条记录)
           过车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  会出现大于 车道信息表 条数的记录求各位大神指点求各位大神指点求各位大神指点求各位大神指点 

解决方案 »

  1.   


           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')
            
     这样又无法得到我想要的 图片路径  求解 求解
      

  2.   

           SELECT   CDXX.SBBH,cdxx.CDBH,max(imgurl)
      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;
      

  3.   

    看的逻辑有点乱,看了2遍才明白
    你就是想显示SBBH,CDBH, 然后加任意一条图片记录imgurl  ?
      

  4.   

    最好还有其他列 没有匹配的 图片显示null
      

  5.   

    这个语句就是SBBH,CDBH 有记录,图片路径没记录就显示的空
      

  6.   

    '现在需要    一段时间内  所有车道每个车道取一张图片, 没有记录图片留空'
    根据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
    ;
    不知理解的对否?