سؤال

أنا لست postgredev ، حصلت على مشكلة في إعادة قيمة واحدة فقط في الاسم الفرعي.

select * from
(
select m_id from TableA where m_id = 236779

)Main
inner  join
(
select m_m_id as l_m_id,date_created as l_date_created
from TableB
where
proc_type <> '-'
order by date_created desc limit 1
) CheckLastCode on (Main.m_id = CheckLastCode.l_m_id)

سيعود مجموعة فارغة.

عندما أنزل الحد 1

select * from
(
select m_id from TableA where m_id = 236779

)Main
inner  join
(
select m_m_id as l_m_id,date_created as l_date_created
from TableB
where
proc_type <> '-'
order by date_created desc
) CheckLastCode on (Main.m_id = CheckLastCode.l_m_id)

سيعود كل شيء من TableB.

أنا أحاول الحصول على القيمة الأخيرة فقط من TableB

eDit يجب أن تعمل لكل m_id في Tablea

لذلك مخرجتي: M_ID | Max (date_created) لهذا m_id | ...

هل كانت مفيدة؟

المحلول

ها هو SQL Fiddle هذا يوضح الاستعلام التالي:

SELECT * 
FROM TableA AS a
  JOIN TableB as b 
  ON a.m_id = b.m_m_id AND b.date_created = 
  (
    SELECT MAX(bs.date_created) 
    FROM TableB bs
    WHERE bs.m_m_id = a.m_id
    LIMIT 1
  )

إذا كانت الجداول الخاصة بك تحتوي على الكثير من السجلات ، فقد ترغب في تطبيق نطاق في جملة حيث تسريع الاستعلام ، مثل ذلك:

SELECT * 
FROM TableA AS a
  JOIN TableB as b 
  ON a.m_id = b.m_m_id AND b.date_created = 
  (
    SELECT MAX(bs.date_created) 
    FROM TableB bs
    WHERE bs.m_m_id = a.m_id
    LIMIT 1
  )
WHERE a.m_id BETWEEN 2 AND 3

نصائح أخرى

تغيير الاستعلام الثاني إلى:

select m_m_id as l_m_id,date_created as l_date_created
  from TableB
 where proc_type <> '-'
   and date_created = (select max(date_created) 
                        from TableB 
                        where m_m_id = 236779 limit 1)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top