جلب بيانات من عدة اعمدة بشرط في Sql Group By
#11
(15-02-2021, 03:58 PM)samnaj00 كتب : هل هذا الحل تمام ؟ أم أن هناك حلاً افضل؟

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

هل من حل؟
الرد
#12
أكبر تاريخ
كود :
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
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
[-] كل من 1 user says قال شكرا ل محمد عبد العزيز على المشاركة المفيدة
  • samnaj00
الرد
#13
جزاك الله كل خير استاذي الكريم محمد
خبرة واتقان
بعد هذا الكود سأنظر ملياً في inner join   ان شاء الله تعالى
الرد
#14
https://delphi4arab.net/forum/showthread.php?tid=7615
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
[-] كل من 1 user says قال شكرا ل محمد عبد العزيز على المشاركة المفيدة
  • samnaj00
الرد
#15
-----------------------------------------------------------------
وجدت الحل المناسب بعد اضافة حقل 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]
‏اللّهمّ فرّج أُموراً ضَاقت بها صُدورنا وعجزت بها حيلتنا وقلّ بها صَبرنا الّلهمّ أَسعِد قلوبنا بما أنتَ أعْلَمُ بِهِ مِنّا
[-] كل من 1 user says قال شكرا ل larbiparadox على المشاركة المفيدة
  • samnaj00
الرد
#16
ما شاء الله عليك استاذ محمد

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



استاذي الكريم larbiparadox اشكرك على الاضافة
[-] كل من 1 user says قال شكرا ل samnaj00 على المشاركة المفيدة
  • larbiparadox
الرد
#17
السلام عليكم ورحمة الله وبركاته
السادة الكرام
جملة 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);

 فهل يمكن جلب النتيجة بجملة واحدة فقط؟
الرد
#18
(17-02-2021, 04:06 PM)samnaj00 كتب : جملة INNER JOIN لم تنجح لوحدها في جلب اخر تاريخ لانه اذا كان التاريخ مكرراً لل ID مثلاً 2/2/2021 مكرراً مرتين لل ID رقم 1 فانه سيظهر التاريخان في الاستعلام
هذا غير منطقي
كيف يكون لنفس الشخص أجرين بنفس التاريخ !؟
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
[-] كل من 1 user says قال شكرا ل محمد عبد العزيز على المشاركة المفيدة
  • samnaj00
الرد
#19
(17-02-2021, 04:14 PM)محمد عبد العزيز كتب :
(17-02-2021, 04:06 PM)samnaj00 كتب : جملة INNER JOIN لم تنجح لوحدها في جلب اخر تاريخ لانه اذا كان التاريخ مكرراً لل ID مثلاً 2/2/2021 مكرراً مرتين لل ID رقم 1 فانه سيظهر التاريخان في الاستعلام
هذا غير منطقي
كيف يكون لنفس الشخص أجرين بنفس التاريخ !؟
المعذرة استاذي الكريم 
هذه البيانات للمثال فقط
يمكن ان نقول مثلاً  دفعات نقدية من الزبون بدل اجر
الرد
#20
(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 ) ضيف كريم