برای هر مشتری در جدول orders، ستون order_date و اولین تاریخ سفارش آن مشتری را با استفاده از تابع FIRST_VALUE نمایش دهید.
3.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:13 0.0
برای حل این مسئله از MySQL 8.0+ و توابع پنجرهای استفاده کنید؛ نمونه عبارت: FIRST_VALUE(order_date) OVER (PARTITION BY customer_id ORDER BY order_date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) که مقدار اولین (earliest) order_date را برای هر customer_id بازمیگرداند. نکات: با ORDER BY صعودی تاریخ اولین سفارش را میگیرید، استفاده از frame (UNBOUNDED PRECEDING ... UNBOUNDED FOLLOWING) باعث میشود مقدار ثابت اولین سفارش برای همه ردیفهای پارتیشن نمایش داده شود، و در صورت وجود NULLها یا نیاز به عملکرد بهتر میتوانید از MIN() OVER(...) یا ایندکس روی order_date استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای هر مشتری در جدول orders، میتوانید از FIRST_VALUE(order_date) OVER (PARTITION BY customer_id ORDER BY order_date ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) استفاده کنید تا اولین تاریخ سفارش هر مشتری را نمایش دهد. با این فریم، مقدار ثابت اولین تاریخ برای تمام ردیفهای همان پارتیشن بازمیگردد. اگر به سادگی و کارایی بیشتر نیاز دارید یا با NULL مواجه هستید، میتوانید از MIN(order_date) OVER (PARTITION BY customer_id) استفاده کنید. همچنین ایجاد ایندکس مناسب روی order_date (و ترجیحاً ترکیبی با customer_id) میتواند سرعت اجرای پنجره را بهبود دهد.
گزارش