delphi4arab منتديات دلفي للعرب
جلب بيانات من عدة اعمدة بشرط في Sql Group By - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : جلب بيانات من عدة اعمدة بشرط في Sql Group By (/showthread.php?tid=11232)

الصفحات: 1 2


RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - samnaj00 - 16-02-2021

(15-02-2021, 03:58 PM)samnaj00 كتب : هل هذا الحل تمام ؟ أم أن هناك حلاً افضل؟

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

هل من حل؟


RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - محمد عبد العزيز - 16-02-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



RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - samnaj00 - 16-02-2021

جزاك الله كل خير استاذي الكريم محمد
خبرة واتقان
بعد هذا الكود سأنظر ملياً في inner join   ان شاء الله تعالى


RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - محمد عبد العزيز - 16-02-2021

https://delphi4arab.net/forum/showthread.php?tid=7615


RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - larbiparadox - 16-02-2021

-----------------------------------------------------------------
وجدت الحل المناسب بعد اضافة حقل 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]


RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - samnaj00 - 16-02-2021

ما شاء الله عليك استاذ محمد

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



استاذي الكريم larbiparadox اشكرك على الاضافة


RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - samnaj00 - 17-02-2021

السلام عليكم ورحمة الله وبركاته
السادة الكرام
جملة 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);

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


RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - محمد عبد العزيز - 17-02-2021

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



RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - samnaj00 - 17-02-2021

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


RE: جلب بيانات من عدة اعمدة بشرط في Sql Group By - samnaj00 - 20-02-2021

(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

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