1

user特定の条件が満たされている(フィールドに基づいて)最も早い行からフィールドを選択しようとしているOracleデータベースがあり、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'

私の問題は、WHERE条件に一致するuser最も早い値を持つ行から値のみをSELECTして取得する方法がわからないことです。SELECTで集計関数を実行していないため、time使用できないと思います。HAVING「最も早いtime値」の条件は、フィールドの選択にのみuser適用する必要があります。つまり、フィールドのすべての値に対して選択する必要がidあります。valuetime

上記のSELECTステートメントを保持してから、必要な特定のものを取得する別のSELECTステートメントとJOINできると考えて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全体に対して1つの値しか取得しないため、最初のクエリでSELECTされたuser値ごとに個別の値が必要です。他のクエリのフィールドでクエリidを制限するにはどうすればよいですか?これは私が欲しいものを手に入れるための正しいアプローチでさえありますか?SELECT userid

4

1 に答える 1

1
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'
于 2009-11-18T18:17:07.397 に答える