Để so sánh ngày đầu tiên (MIN) và ngày cuối cùng (MAX) của mỗi người dùng và tính khoảng thời gian giữa chúng, bạn dùng TIME_TO_SEC(), MIN(), MAX() kết hợp GROUP BY.
Ví dụ minh họa
Tạo bảng bài đăng:
mysql> create table DemoTable (
UserName varchar(100),
UserPostDatetime datetime
);
Chèn dữ liệu (Adam đăng 3 lần trong ngày):
mysql> insert into DemoTable values('Adam','2019-08-24 11:10:00');
mysql> insert into DemoTable values('Adam','2019-08-24 11:20:00');
mysql> insert into DemoTable values('Adam','2019-08-24 11:50:00');
Hiển thị dữ liệu:
mysql> select * from DemoTable;
Kết quả:
+----------+---------------------+ | UserName | UserPostDatetime | +----------+---------------------+ | Adam | 2019-08-24 11:10:00 | | Adam | 2019-08-24 11:20:00 | | Adam | 2019-08-24 11:50:00 | +----------+---------------------+
Truy vấn tính khoảng thời gian giữa bài đăng đầu và cuối
mysql> select UserName,
sec_to_time(max(time_to_sec(UserPostDatetime)) - min(time_to_sec(UserPostDatetime))) as t
from DemoTable group by UserName;
Kết quả:
+----------+----------+ | UserName | t | +----------+----------+ | Adam | 00:40:00 | +----------+----------+
Giải thích:
TIME_TO_SEC(datetime): Chuyển datetime → tổng số giây từ 00:00:00MAX(...) - MIN(...): Hiệu số giây giữa lần đăng muộn nhất và sớm nhấtSEC_TO_TIME(seconds): Chuyển ngược giây → định dạng HH:MM:SS- 11:10:00 → 11:50:00 = 40 phút = 00:40:00
Cách đơn giản hơn (MySQL 5.7+): TIMEDIFF(MAX(UserPostDatetime), MIN(UserPostDatetime)) trực tiếp trả về INTERVAL.
select UserName, TIMEDIFF(MAX(UserPostDatetime), MIN(UserPostDatetime)) as t from DemoTable group by UserName;