문제

선택하려는 Oracle 데이터베이스가 있습니다. user 가장 빠른 행에서 필드 (a time 필드) 특정 조건이 충족되는 곳에서 어떻게 해야할지 모르겠습니다. 다음은 내 쿼리의 요점입니다.

SELECT id,
       CASE WHEN value = 'xyz'
            THEN 'Pending'
            ELSE 'Not Pending'
       END AS status,
       time
FROM table1
INNER JOIN ...
WHERE subject IN (...) AND
      field = 'Status'

내 문제는 선택하는 방법을 모른다는 것입니다 user 그리고 가장 빨리 행에서 값만 얻습니다. time 위치 조건과 일치하는 가치. 나는 내가 사용할 수 있다고 생각하지 않는다 HAVING 선택에서 집계 기능을하지 않기 때문에. '가장 초기 time 가치 '조건을 적용해야합니다 선택에 user 필드, 즉 내가 원한다 id 그리고 value 선택해야합니다 모두 값의 값 time 필드.

나는 위에서 가지고있는 select 진술을 유지하고 특정 선정 된 진술에 가입 할 수 있다고 생각했습니다. user 원해요.

SELECT id, status, time, user
FROM (
       ...query above...
     ),
     (
       SELECT user
       FROM table1
       WHERE subject in (...) AND
             field = 'Status' AND
             ROWNUM = 1
       ORDER BY time ASC
     )

그러나 이것은 하나의 값만 얻습니다 user 전반적으로, 별도가 있어야합니다 user 각각의 가치 id 첫 번째 쿼리에서 선택되었습니다. 내 제한 방법 SELECT user 다른 쿼리의 쿼리 id 필드? 이것이 내가 원하는 것을 얻기위한 올바른 접근법입니까?

도움이 되었습니까?

해결책

SELECT  id,
        CASE WHEN value = 'xyz'
             THEN 'Pending'
             ELSE 'Not Pending'
        END AS status,
        time,
        FIRST_VALUE(user) OVER (PARTITION BY id ORDER BY time) AS first_user
FROM    table1
INNER JOIN
        ...
WHERE   subject IN (...) AND
        field = 'Status'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top