برای جدول orders که ستون‌های order_id، order_date و delivery_date دارد، یک پرس‌وجو بنویسید که order_id و تعداد روزهای بین order_date و delivery_date را به‌صورت days_between نمایش دهد و فقط ردیف‌هایی که delivery_date و order_date تهی نیستند و days_between منفی نیستند را به‌ترتیب صعودی days_between بازگرداند.

3.0 بازدید آخرین ویرایش در 223 روز قبل ساعت 01:56

0.0

برای حل این مسئله از تابع MySQL DATEDIFF استفاده کنید: DATEDIFF(delivery_date, order_date) تعداد روز بین دو تاریخ را برمی‌گرداند. در بخش WHERE ردیف‌هایی که delivery_date یا order_date NULL هستند را حذف کنید و با شرط DATEDIFF(...) >= 0 منفی‌ها را فیلتر کنید. در انتها با ORDER BY days_between ASC نتایج را مرتب کنید. نکات: اگر نیاز به جایگزینی تاریخ‌های تهی دارید می‌توانید از COALESCE استفاده کنید، و برای نمایش خواناتر نام ستون محاسبه‌شده را با AS days_between تعیین کنید.

توسط پژوهشگر در 223 روز قبل ساعت 01:56
دسته بندی ها: MySQL MySQL for beginner
reyhaneh در 223 روز قبل ساعت 11:31

برای محاسبه تفاوت روز between order_date و delivery_date، استفاده از DATEDIFF با فرض تهی نبودن هر دو ستون گزینه مناسب است. استفاده از COALESCE برای جایگزینی تاریخ‌های تهی می‌تواند از ایجاد NULL در محاسبه جلوگیری کند و کار با داده‌ها را کارآمدتر کند. در شرط WHERE نیز باید وجود NULL را به‌طور صریح فیلتر کنیم و همچنین از شرط DATEDIFF(...) >= 0 برای جلوگیری از مقادیر منفی استفاده کنیم تا فقط ردیف‌های معتبر باقی بمانند. نام‌گذاری نتیجه با AS days_between خوانایی را افزایش می‌دهد و به‌این‌ترتیب امکان استفاده در ORDER BY days_between ASC را ساده می‌کند.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری