最も早い時間でユーザーを選択し、他のデータと参加
-
20-09-2019 - |
質問
私は、私は特定の条件が満たされている(user
フィールドに基づいて)最も古い行からtime
フィールドを選択しようとしているOracleデータベースを持っている、と私はどのように行うのか分かりません。ここに私の質問の主旨だ。
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
を選択し、WHERE条件に一致する最古のtime
値を持つ行からの値のみを取得する方法がわからないです。私は私のSELECT内の任意の集約関数をやっていないよので、私はHAVING
を使用することができるとは思いません。 「早いtime
値」条件、すなわち、私がuser
とid
がvalue
フィールドののすべてのの値のために選択されるようにしたい、time
フィールドの選択に、ののみのを適用する必要があります。
私は上記の持っているSELECT文を維持し、私がしたい特定のuser
を取得し、別のSELECT文でJOINの可能性が考えていた。
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'
所属していません StackOverflow