استرجاع أحدث فاتورتين لكل مجموعة في SQL بدون استخدام row_number()
في البداية، يمكنك تحقيق هدفك بدون استخدام row_number() باستخدام تقنية الانضمام مع نفس الجدول باستخدام شرط مخصص للفلترة. فيما يلي كود SQL يحقق هذا الهدف:
sqlSELECT 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
لاسترجاع الصفوف التي لديها أقل من اثنين من الصفوف التي تحتوي على تواريخ فاتورة أحدث.
-
حساب مجموع قيم الكميات في قائمة Java30/03/2024
-
حل مشكلة مقارنة التواريخ في Pandas بسهولة29/01/2024
-
نصائح بناء بورتفوليو فني15/04/2024
تتجنب هذه الطريقة استخدام row_number() وتقدم بديلاً أقل تعقيدًا لتحقيق الغرض المطلوب.
المزيد من المعلومات
في هذا السياق، يهدف الكود الذي تم توفيره إلى استرجاع أحدث فاتورتين لكل مجموعة (group) وذلك باستخدام استعلام SQL. يتم تحقيق ذلك بواسطة إضافة رقم صف (row number) باستخدام الدالة row_number() وتقسيم البيانات إلى مجموعات باستخدام الشرط partition by.
الجدول المؤقت #tt يتكون من عمودين: id و invoiceDT. يتم إدراج بيانات في هذا الجدول، ثم يتم استخدام استعلام SQL لاسترجاع النتائج المطلوبة.
الاستعلام يقوم بتوليد رقم صف لكل صف في الجدول مرتبًا حسب تاريخ الفاتورة بترتيب تنازلي. بعد ذلك، يتم استخدام الجزء الخارجي (subquery) لاستخدام هذا الرقم لاسترجاع الصفوف التي تحتل المرتبة 1 و 2 في كل مجموعة.
الكود البديل الذي تم توفيره يقوم بتحقيق نفس الغرض، ولكن بدون استخدام row_number(). بدلاً من ذلك، يتم استخدام الانضمام (JOIN) مع نفس الجدول باستخدام شرط يقارن تاريخ الفاتورة. ثم يتم تجميع النتائج واستخدام شرط HAVING لاسترجاع الصفوف المطلوبة.
يتم هذا الكلام بهدف توضيح الكود المقدم والطريقة التي يتم بها استرجاع البيانات المطلوبة من قاعدة البيانات باستخدام SQL.