সিনট্যাক্স:
select * from yourTableName order by ( yourColumnName > now()) desc, (case when yourColumnName > now() then yourColumnName end) , yourColumnName desc limit 1;
প্রথমে একটি টেবিল তৈরি করি:
mysql> create table DemoTable1454 (
-> ShippingDate date
-> );
Query OK, 0 rows affected (0.59 sec)
রেকর্ড ইনসার্ট করি:
mysql> insert into DemoTable1454 values('2019-10-01');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable1454 values('2019-10-03');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1454 values('2019-10-05');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1454 values('2019-10-04');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1454 values('2018-10-06');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1454 values('2019-10-06');
Query OK, 1 row affected (0.11 sec)
সব রেকর্ড দেখি:
mysql> select * from DemoTable1454;
আউটপুট:
+--------------+ | ShippingDate | +--------------+ | 2019-10-01 | | 2019-10-03 | | 2019-10-05 | | 2019-10-04 | | 2018-10-06 | | 2019-10-06 | +--------------+ 6 rows in set (0.00 sec)
কারেন্ট ডেট-টাইম:
mysql> select now(); +---------------------+ | now() | +---------------------+ | 2019-10-04 21:30:01 | +---------------------+ 1 row in set (0.00 sec)
পরবর্তী সবচেয়ে নিকটবর্তী দিন বের করার কোয়েরি:
mysql> select * from DemoTable1454
-> order by ( ShippingDate > now()) desc,
-> (case when ShippingDate > now() then ShippingDate end) ,
-> ShippingDate desc
-> limit 1;
আউটপুট (কারেন্ট ২০১৯-১০-০৪, তাই পরের দিন ২০১৯-১০-০৫):
+--------------+ | ShippingDate | +--------------+ | 2019-10-05 | +--------------+ 1 row in set (0.00 sec)
লজিক: ভবিষ্যতের ডেটগুলোকে আগে আনা হয় (desc), তারপর সেগুলোর মধ্যে সবচেয়ে ছোটটি (সর্বোচ্চ নিকটবর্তী) বের করা হয়।