البرمجة

استرجاع أحدث فاتورتين لكل مجموعة في SQL بدون استخدام row_number()

في البداية، يمكنك تحقيق هدفك بدون استخدام row_number() باستخدام تقنية الانضمام مع نفس الجدول باستخدام شرط مخصص للفلترة. فيما يلي كود SQL يحقق هذا الهدف:

sql
SELECT t1.id, t1.invoiceDT FROM #tt t1 LEFT JOIN #tt t2 ON t1.id = t2.id AND t1.invoiceDT < t2.invoiceDT GROUP BY t1.id, t1.invoiceDT HAVING COUNT(*) < 2;

يقوم هذا الاستعلام بالانضمام إلى الجدول #tt على نفس نفسه (t1 و t2) باستخدام شرط يقارن تواريخ الفاتورة (invoiceDT). ثم يتم تجميع النتائج بواسطة id و invoiceDT ويتم تصفية النتائج باستخدام الشرط HAVING لاسترجاع الصفوف التي لديها أقل من اثنين من الصفوف التي تحتوي على تواريخ فاتورة أحدث.

تتجنب هذه الطريقة استخدام row_number() وتقدم بديلاً أقل تعقيدًا لتحقيق الغرض المطلوب.

المزيد من المعلومات

في هذا السياق، يهدف الكود الذي تم توفيره إلى استرجاع أحدث فاتورتين لكل مجموعة (group) وذلك باستخدام استعلام SQL. يتم تحقيق ذلك بواسطة إضافة رقم صف (row number) باستخدام الدالة row_number() وتقسيم البيانات إلى مجموعات باستخدام الشرط partition by.

الجدول المؤقت #tt يتكون من عمودين: id و invoiceDT. يتم إدراج بيانات في هذا الجدول، ثم يتم استخدام استعلام SQL لاسترجاع النتائج المطلوبة.

الاستعلام يقوم بتوليد رقم صف لكل صف في الجدول مرتبًا حسب تاريخ الفاتورة بترتيب تنازلي. بعد ذلك، يتم استخدام الجزء الخارجي (subquery) لاستخدام هذا الرقم لاسترجاع الصفوف التي تحتل المرتبة 1 و 2 في كل مجموعة.

الكود البديل الذي تم توفيره يقوم بتحقيق نفس الغرض، ولكن بدون استخدام row_number(). بدلاً من ذلك، يتم استخدام الانضمام (JOIN) مع نفس الجدول باستخدام شرط يقارن تاريخ الفاتورة. ثم يتم تجميع النتائج واستخدام شرط HAVING لاسترجاع الصفوف المطلوبة.

يتم هذا الكلام بهدف توضيح الكود المقدم والطريقة التي يتم بها استرجاع البيانات المطلوبة من قاعدة البيانات باستخدام SQL.

زر الذهاب إلى الأعلى