اختيار المستخدم مع أقرب وقت والانضمام إلى بيانات أخرى
-
20-09-2019 - |
سؤال
لدي قاعدة بيانات Oracle حيث أحاول تحديد ملف user
الحقل من الصف الأول (استنادًا إلى أ 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
بما أنني لا أقوم بأي وظائف إجمالية في Select. أقرب وقت ممكن time
يجب تطبيق شرط القيمة فقط إلى اختيار user
الحقل ، أي أريد id
و value
ليتم اختياره ل الكل قيم time
مجال.
كنت أفكر في أنه يمكنني الاحتفاظ بالبيان المحدد لدي أعلاه ، ثم الانضمام إلى بيان محدد آخر يحصل على خاص 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'