কম্পিউটার টিউটোরিয়াল

MySQL-এ DATE_SUB() এবং BETWEEN ব্যবহার করে গত ৩ দিনের আগে পোস্ট করা রো ফিল্টার করুন

MySQL-এ নির্দিষ্ট তারিখ থেকে গত N দিনের রেঞ্জে পড়া রেকর্ড ফিল্টার করতে DATE_SUB() এবং BETWEEN অপারেটর ব্যবহার করা হয়।

উদাহরণ (মান লইয়া: বর্তমান তারিখ ২০১৯-১০-২০)

১. টেবিল তৈরি করুন

mysql> CREATE TABLE DemoTable1582 (PostedDate DATETIME);

২. ভিন্ন তারিখের ডেটা ইনসার্ট করুন

mysql> INSERT INTO DemoTable1582 VALUES('2019-01-21 12:34:40');
mysql> INSERT INTO DemoTable1582 VALUES('2019-10-15 11:00:00');
mysql> INSERT INTO DemoTable1582 VALUES('2019-10-25 01:10:00');

৩. সব রেকর্ড দেখুন

mysql> SELECT * FROM DemoTable1582;

আউটপুট:

+---------------------+
| PostedDate          |
+---------------------+
| 2019-01-21 12:34:40 |
| 2019-10-15 11:00:00 |
| 2019-10-25 01:10:00 |
+---------------------+

৪. গত ৩ দিনের রেঞ্জে পড়া রেকর্ড ফিল্টার করুন (লজিক্যাল ভুল থাকতে পারে)

mysql> SELECT * FROM DemoTable1582
    -> WHERE PostedDate BETWEEN DATE_SUB(PostedDate, INTERVAL 3 DAY) AND NOW();

৫. ফলাফল

+---------------------+
| PostedDate          |
+---------------------+
| 2019-01-21 12:34:40 |
| 2019-10-15 11:00:00 |
+---------------------+

⚠️ গুরুত্বপূর্ণ লজিক্যাল সমস্যা: ওরিজিনাল কোয়েরিতে DATE_SUB(PostedDate, INTERVAL 3 DAY) ব্যবহার করা হয়েছে, যা প্রতিটি রোয়ার নিজস্ব PostedDate থেকে ৩ দিন আগে ক্যালকুলেট করে। ফলে প্রায় সব রোই মেলে যাবে (কারণ PostedDate সবসময় নিজের ৩ দিন পরে থাকে)।

সঠিক কোয়েরি (স্থির রেফারেন্স তারিখ ব্যবহার):

SELECT * FROM DemoTable1582
WHERE PostedDate BETWEEN DATE_SUB('2019-10-20', INTERVAL 3 DAY) AND '2019-10-20';
-- বা
WHERE PostedDate BETWEEN DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW();

এটি ২০১৯-১০-১৭ থেকে ২০১৯-১০-২০ পর্যন্ত রেকর্ড দেবে (২০১৯-১০-১৫ বাদ যাবে, ২০১৯-১০-২৫ বাদ যাবে)।

  1. MySQL-এ INFORMATION_SCHEMA.TABLES দিয়ে সর্বশেষ তৈরি টেবিলের নাম বের করা

  2. MySQL-এ GROUP BY ও ORDER BY ব্যবহার করে যোগফল বের করে সর্ট করা

  3. MySQL-এ ORDER BY DESC LIMIT 30 ব্যবহার করে শেষ ৩০টি রো পান

  4. MySQL-এ সাবকোয়েরি ব্যবহার করে শেষ ৩টি রো এসেন্ডিং অর্ডারে পান