যখন একটি 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_BYSQL মোড অন থাকলে নন-এগ্রিগেটেড কলাম সিলেক্ট করলে এরর দেবে- বড় টেবিলে পারফরম্যান্সের জন্য কম্পিউটেড কলাম বা ফাংশনাল ইনডেক্স ব্যবহার করুন