اختيار المستخدم مع أقرب وقت والانضمام إلى بيانات أخرى

StackOverflow https://stackoverflow.com/questions/1757984

سؤال

لدي قاعدة بيانات 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'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top