اگر بخواهیم در جدولی که شامل ردیف‌های متعدد متصل به یک جدول خارجی است، ردیف‌ها را گروه‌بندی کنیم و از هر گروه یک ردیف را با شرطی خاص استخراج کنیم، روش‌های متنوع و با مزایا و معایب مختلفی وجود دارند.

مای اسکیو ال

برای مثال فرض کنید جدولی برای محصولات و جدولی برای قیمت محصول در طول زمان ایجاد کرده‌ایم. اگر بخواهیم آخرین قیمت ثبت شده برای تمام محصولات را یکجا دریافت کنیم،لازم است تا راهی برای بازخوانی این اطلاعات پیدا کنیم.

یکی از کارآمدترین روش‌ها، استفاده از روش زیر است که در نسخه‌های مختلف MySQL و سایر پایگاه‌های داده به خوبی کار می‌کند.

select p1.* from prices p1
left join prices p2
    on( p1.product_id = p2.product_id and p1.created_at < p2.created_at )
where p2.created_at is null

در این روش جدول قیمت‌ها را با استفاده از left join به خودش متصل می‌کنیم. اتصال با این شرط است که ردیف‌ها مربوط به یک محصول باشند و تاریخ ثبت قیمت در جدول اول از تاریخ ثبت قیمت در جدول دوم قدیمی‌تر باشد.

سپس روی نتایج به دست آمده شرط می‌گذاریم که ستون تاریخ در جدول دوم NULL باشد.به عبارت دیگر، در این روش ابتدا ردیف‌هایی که تاریخ جدول اول از تاریخ جدول دوم قدیمی‌تر است پیدا می‌شوند و اگر تاریخ ثبت شده در جدول اول قدیمی‌تر از هیچ تاریخی در جدول دوم نباشد( مساوی جدیدترین تاریخ باشد ) همان ستون با دستور where فیلتر می‌شود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *