MySQL Help: حدد Table2.id أين ... Table1.Date أكبر
سؤال
لدي 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 الصفوف الأولى مع التواريخ