اذهب إلى المحتوى

السؤال

نشر

لدي جدول للموظفين في قاعدة البيانات بهذا الشكل:

id  department_id   amount   created_at
1   10              100      2017-06-01 00:00:00
2   15              250      2017-06-01 00:00:00
....
154 10              43500    2017-12-24 00:00:00
255 15              4000     2017-12-24 00:00:00

وأريد إجراء استعلام بحيث يعيد لي السجلات مرتبة ترتيب تنازلي حسب عمود created_at ولكن لكل قسم، فلقد حاولت إجراء الاستعلام التالي:

$date = Deps::where('department_id', '=', 15)
    ->orderBy('created_at', 'DESC')
    ->first();

واستطيع استعادة سجل واحد من الجدول حسب ترتيب التاريخ، ولكن كيف يمكنني استعادة السجلات التي لها رقم قسم مختلف ومرتبة ترتيب تنازلي حسب التاريخ ويتم أخذ أول تاريخ فقط من هذا الترتيب؟

Recommended Posts

  • 0
نشر

للحصول على آخر سجل لكل قسم حسب أرقام الأقسام الفريدة، يمكن تنفيذ الاستعلام التالي:

select s.*
from deps s
left join deps s1 on s.department_id = s1.department_id
and s.created_at < s1.created_at
where s1.department_id is null

وعن طريق Eloquent:

DB::table('deps as s')
  ->select('s.*')
  ->leftJoin('deps as s1', function ($join) {
        $join->on('s.department_id', '=', 's1.department_id')
             ->whereRaw(DB::raw('s.created_at < s1.created_at'));
   })
  ->whereNull('s1.department_id')
  ->get();

وبهذه الطريقة سيتم عند استعادة كل سجل مقارنته مع بقية السجلات التي تنتمي للقسم المحدد و أخذ القيمة الأصغر من التاريخ الموجود ضمن العمود created_at

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...