2017-03-21 15 views
0

그래서 이것은 내 쿼리입니다 : 내가 생산 된 부품이 주어진 시간 동안 17 곳의 정확한 출력을 얻고있다

select count(a.rs1) as partsProduced, a.DEVICEID ,a.DATA_MAINPROGRAMNO from (
    SELECT currow, rs1, rs2,DEVICEID,DATA_MAINPROGRAMNO 
    FROM (
    SELECT current_row.row1 currow, 
    current_row.DATA_RUNSTATUS rs1, 
    current_row.DEVICEID DEVICEID, 
     current_row.DATA_MAINPROGRAMNO DATA_MAINPROGRAMNO, 
    next_row.row1 nextrow, 
    next_row.DATA_RUNSTATUS rs2 
    FROM (SELECT rownumber() over(order by DATA_TIMEINMILLISECS) as row1, m.* FROM "IOTP_SL2IID_GOVHISTORICALDB_2017-03-20" 
    m where DEVICEID ='deviceName') AS current_row 
    LEFT JOIN (SELECT rownumber() over(order by DATA_TIMEINMILLISECS) as row1, m.* FROM "IOTP_SL2IID_GOVHISTORICALDB_2017-03-20" m 
    where DEVICEID ='deviceName') AS next_row 
    ON (current_row.row1 = next_row.row1 - 1) 
    where (TIMESTAMP_FORMAT(current_row.DATA_TIMESTAMP,'YYYY.MM.DD.HH24.MI.SS') 
    BETWEEN '2017-03-20 14:00:00' AND '2017-03-20 15:00:00')) AS a WHERE a.rs1 = 3 AND a.rs2 = 0) as a group by a.DEVICEID ,a.DATA_MAINPROGRAMNO; 

,하지만 난

DEVICEID= 'deviceName'를 교체 할 때마다
DEVICEID IN (select d.DEVICE_ID from device d left join line l on (l.id=d.LINE_ID) where l.id=1 

나는 여러 개의 deviceNames가 필요하며이를 사용하여 쿼리를 실행하므로 이전에는 단일 장치로 실행 한 동일한 장치에 대해 300 개의 항목이 생겨 났으므로 올바른 IN 키워드를 사용하고 있습니까? 또는 어떤 편집 작업을해야합니까?

+1

... .? –

+0

@data_henrik 20이고 이름은 btw입니다. 즉, string –

답변

0

라훌,

테이블 장치에서 확인 DEVICE_ID 값이 값은 다음 하시다면 기존 쿼리를 앞서 갈 수 null이 아닌 null.If되지 않습니다 확인 :

의 DeviceID IN (에서 d.DEVICE_ID를 선택 장치 (D)는 (l.id = d.LINE_ID)에 라인 (L)에 가입 한 부분 l.id = 1

DEVICE_ID 널값 후 (쿼리

의 DeviceID 이하에있는 경우 사용 구별을 선택 NVL (d.DEVICE_ID, 0) 장치 (D)에서의 선 (L)에 가입 왼쪽 (l.id = d.LINE_ID) 여기서 l.id = 하위 조회에서 리턴되는 DEVICE_ID 1