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

MySQL-এ DATETIME কলাম থেকে DATE দিয়ে GROUP BY করা

যখন একটি DATETIME বা TIMESTAMP কলাম থাকে এবং আপনি শুধু তারিখ অনুযায়ী গ্রুপ করতে চান, তবে DATE() ফাংশন ব্যবহার করে সময় অংশ বাদ দিন।

সিনট্যাক্স

SELECT * FROM table_name GROUP BY DATE(datetime_column);

উদাহরণ

CREATE TABLE group_by_date_demo (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_name VARCHAR(20),
    user_post_datetime DATETIME
);

INSERT INTO group_by_date_demo (user_name, user_post_datetime) VALUES
('Larry', '2018-01-02 13:45:40'),
('Mike',  '2018-01-02 13:45:40'),
('Sam',   '2019-01-28 12:30:34'),
('David', '2019-02-10 11:35:54'),
('Maxwell','2019-02-10 11:35:54');

GROUP BY DATE() ক্যোয়ারি

SELECT * FROM group_by_date_demo GROUP BY DATE(user_post_datetime);

ফলাফল

+----+-----------+---------------------+
| id | user_name | user_post_datetime  |
+----+-----------+---------------------+
| 1  | Larry     | 2018-01-02 13:45:40 |
| 3  | Sam       | 2019-01-28 12:30:34 |
| 4  | David     | 2019-02-10 11:35:54 |
+----+-----------+---------------------+

প্রতিটি তারিখের প্রথম রেকর্ডটি দেখানো হয়েছে (MySQL-এর ONLY_FULL_GROUP_BY মোড অফ থাকলে)।

এগ্রিগেশন সহ সঠিক পদ্ধতি

SELECT DATE(user_post_datetime) AS post_date,
       COUNT(*) AS post_count,
       GROUP_CONCAT(user_name) AS users
FROM group_by_date_demo
GROUP BY DATE(user_post_datetime);

ফলাফল

+------------+------------+------------------+
| post_date  | post_count | users            |
+------------+------------+------------------+
| 2018-01-02 | 2          | Larry,Mike       |
| 2019-01-28 | 1          | Sam              |
| 2019-02-10 | 2          | David,Maxwell    |
+------------+------------+------------------+

গোষ্ঠীકরণের জন্য ইনডেক্স টিপ

-- ফাংশন-ভিত্তিক ইনডেক্স (MySQL 8.0.13+)
ALTER TABLE group_by_date_demo 
ADD INDEX idx_post_date ((DATE(user_post_datetime)));

দ্রষ্টব্য

  • DATE() ফাংশন 時間 অংশ উপেক্ষা করে শুধু তারিখ রিটার্ন করে
  • ONLY_FULL_GROUP_BY SQL মোড অন থাকলে নন-এগ্রিগেটেড কলাম সিলেক্ট করলে এরর দেবে
  • বড় টেবিলে পারফরম্যান্সের জন্য কম্পিউটেড কলাম বা ফাংশনাল ইনডেক্স ব্যবহার করুন
  1. MySQL কোয়েরি দিয়ে কারেন্ট ডেট কোনো ডেট রেঞ্জে পড়ে কিনা চেক করা

  2. MySQL에서 예약어 'group'을 테이블명으로 쓰려면 백틱으로 감싸기

  3. Java-এ MySQL ব্যবহার করে বর্তমান তারিখে মাস যোগ করে ইনসার্ট করা

  4. পাইথনে MySQL-এ ডেট অবজেক্ট ইন্সার্ট কীভাবে করবেন?