سؤال

لدي 2 طاولات، باستخدام انضمام Inner للاستعلام عنها.

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ?

يحسب معرفات الإدخالات على التقارير بين 2 تواريخ. يحتوي الجدول 1 على معلومات حول التقارير (التاريخ، GroupID، إلخ)، يحمل الجدول 2 الإدخالات على التقارير.

أرغب في إجراء استفسار تماما تقريبا، إلا أنه لا يختار فقط المعرفات من التقرير بأحدث تاريخ، بين تلك التواريخ 2.

هل أستطيع مساعدتك؟ لا أستطيع أن أحصل على رأسي حول استفسارات نوع الحد الأقصى (التاريخ) - كل ما أستعيده هو عدد من كل معرف وأيضا تاريخ الحد الأقصى، بدلا من تلك المعرفات فقط من تاريخ الحد الأقصى.

شكرا،


لقد كنت أفكر ربما استعلام SQL المتداخل - هل يمكنك القيام بذلك؟ يمكنني العثور على مراجع على Google، ولكن لا يمكن الحصول عليها للعمل ... شيء مشابه ل:

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ? AND 
(
    SELECT MAX(date) 
    FROM table1 
    WHERE date > ? AND date < ?
)

لا يمكن الحصول على ذلك للعمل، وعندما أحاول اختباره في phpmyadmin، فإنه يركل لي مع خطأ يخبرني أن مستخدمي لا يحتوي على امتيازات مختارة. غريب، لأن هذا هو خادم اختبار قمت بتسجيل الدخول كجذر.

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

المحلول

دون مزيد من المعلومات حول هيكل الجداول، أود أن أقترح عليك تجربة شيء مثل هذا:

SELECT t2.id
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.relation_id
WHERE t1.date BETWEEN ? AND ?
HAVING MAX(t1.date)

لم أختبر هذا ولكن يجب أن أشير إلى اتجاه واحد يمكنك الذهاب مع هذه المشكلة. اقتراحك الآخر الخاص باستخدام Sacquery صالح وقد يعمل شيء مثل هذا:

SELECT *
FROM table2 t2 
WHERE t2.parent_id IN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
)

أو في انضمام إلى جدول مؤقت:

SELECT *
FROM table2 t2
INNER JOIN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
) AS t1 ON t2.relation_id = t1.relation_id

نصائح أخرى

 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

سوف تحصل عليك 10 الصفوف الأولى مع التواريخ

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top