delphi4arab منتديات دلفي للعرب

نسخة كاملة : جلب بيانات من عدة اعمدة بشرط في Sql Group By
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
(15-02-2021, 03:58 PM)samnaj00 كتب : [ -> ]هل هذا الحل تمام ؟ أم أن هناك حلاً افضل؟

بعد التجربة تبين عدم نجاح الكود لانه يجلب اخر سجل لل id سواء كان تاريخه الاكبر او غير ذلك
فلو كان تواريخ ال id على التسلسل (4/4/2021 - 5/5/2021 - 2/2/2021 ) فانه يجلب اخر سجل وهو 2/2/2021

هل من حل؟
أكبر تاريخ
كود :
SELECT a.id, a.date1, a.salary FROM Table1 a INNER JOIN (     SELECT id, MAX(date1) date2     FROM Table1     GROUP BY id ) b ON a.id = b.id AND a.date1 = b.date2
أكبر أجر
كود :
SELECT a.id, a.date1, a.salary FROM Table1 a INNER JOIN (     SELECT id, MAX(salary) salary1     FROM Table1     GROUP BY id ) b ON a.id = b.id AND a.salary = b.salary1
جزاك الله كل خير استاذي الكريم محمد
خبرة واتقان
بعد هذا الكود سأنظر ملياً في inner join   ان شاء الله تعالى
-----------------------------------------------------------------
وجدت الحل المناسب بعد اضافة حقل Auto للـ Table1 نوعه Autoinc
كود :
drop table memory tmp_table2; SELECT T1.id,T1.salary,T1.date1,T1.auto,T1.daen,T1.note into memory tmp_table2 FROM Table1 T1 WHERE  T1.id in(select T2.id from Table1 T2 group by T2.id) and T1.date1 in(select max(T2.date1) as date1 from Table1 T2 group by T2.id); SELECT T2.id, T2.salary,T2.date1,T2.auto,T2.daen,T2.note FROM memory tmp_table2 T2 WHERE  T2.id in(select T3.id from memory tmp_table2 T3 group by T3.id) and T2.auto in(select  max(T3.auto) as auto from memory tmp_table2 T3 group by T3.id);

أترك الحل الخاص بك كما هو فقط اضف أندكس لـ date1 كما في الصورة

عند التنفيذ تتغير النتيجة

[صورة: 135181430.png]
ما شاء الله عليك استاذ محمد

دائماً جاهز للمعلومة



استاذي الكريم larbiparadox اشكرك على الاضافة
السلام عليكم ورحمة الله وبركاته
السادة الكرام
جملة INNER JOIN لم تنجح لوحدها في جلب اخر تاريخ لانه اذا كان التاريخ مكرراً لل ID مثلاً 2/2/2021 مكرراً مرتين لل ID رقم 1 فانه سيظهر التاريخان في الاستعلام

لذلك فعلت في INNER JOIN كما فعلت في جملة iN  باضافة حقل AUTO  لاظهار النتيجة المرجوة

INNER JOIN
كود :
drop table memory tmp_tb; SELECT a.id, a.date1, a.salary, a.daen, a.note, a.auto INTO memory tmp_tb FROM Table1 a INNER JOIN (SELECT id, MAX(date1) date2 FROM Table1 GROUP BY id) b ON a.id = b.id AND a.date1 = b.date2; SELECT a.id, a.date1, a.salary, a.daen, a.note, a.auto FROM memory tmp_tb a INNER JOIN (SELECT id, MAX(auto) auto2 FROM memory tmp_tb     GROUP BY id ) b ON a.id = b.id AND a.auto = b.auto2

IN
كود :
drop table memory tmp_tb; SELECT T1.id, T1.date1, T1.salary, T1.daen, T1.note, T1.auto into memory tmp_tb FROM Table1 T1 WHERE  T1.id in(select T2.id from Table1 T2 group by T2.id) and T1.date1 in(select max(T2.date1) as date1 from Table1 T2 group by T2.id); SELECT T2.id, T2.date1, T2.salary, T2.daen, T2.note, T2.auto FROM memory tmp_tb T2 WHERE  T2.id in(select T3.id from memory tmp_tb T3 group by T3.id) and T2.auto in(select  max(T3.auto) as auto from memory tmp_tb T3 group by T3.id);

 فهل يمكن جلب النتيجة بجملة واحدة فقط؟
(17-02-2021, 04:06 PM)samnaj00 كتب : [ -> ]جملة INNER JOIN لم تنجح لوحدها في جلب اخر تاريخ لانه اذا كان التاريخ مكرراً لل ID مثلاً 2/2/2021 مكرراً مرتين لل ID رقم 1 فانه سيظهر التاريخان في الاستعلام
هذا غير منطقي
كيف يكون لنفس الشخص أجرين بنفس التاريخ !؟
(17-02-2021, 04:14 PM)محمد عبد العزيز كتب : [ -> ]
(17-02-2021, 04:06 PM)samnaj00 كتب : [ -> ]جملة INNER JOIN لم تنجح لوحدها في جلب اخر تاريخ لانه اذا كان التاريخ مكرراً لل ID مثلاً 2/2/2021 مكرراً مرتين لل ID رقم 1 فانه سيظهر التاريخان في الاستعلام
هذا غير منطقي
كيف يكون لنفس الشخص أجرين بنفس التاريخ !؟
المعذرة استاذي الكريم 
هذه البيانات للمثال فقط
يمكن ان نقول مثلاً  دفعات نقدية من الزبون بدل اجر
(17-02-2021, 04:06 PM)samnaj00 كتب : [ -> ]السلام عليكم ورحمة الله وبركاته
السادة الكرام
جملة INNER JOIN لم تنجح لوحدها في جلب اخر تاريخ لانه اذا كان التاريخ مكرراً لل ID مثلاً 2/2/2021 مكرراً مرتين لل ID رقم 1 فانه سيظهر التاريخان في الاستعلام

لذلك فعلت في INNER JOIN كما فعلت في جملة iN  باضافة حقل AUTO  لاظهار النتيجة المرجوة

INNER JOIN
كود :
drop table memory tmp_tb; SELECT a.id, a.date1, a.salary, a.daen, a.note, a.auto INTO memory tmp_tb FROM Table1 a INNER JOIN (SELECT id, MAX(date1) date2 FROM Table1 GROUP BY id) b ON a.id = b.id AND a.date1 = b.date2; SELECT a.id, a.date1, a.salary, a.daen, a.note, a.auto FROM memory tmp_tb a INNER JOIN (SELECT id, MAX(auto) auto2 FROM memory tmp_tb     GROUP BY id ) b ON a.id = b.id AND a.auto = b.auto2

فهل يمكن جلب النتيجة بجملة واحدة فقط؟
الصفحات : 1 2