Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

So sánh ngày đầu và ngày cuối trong cột datetime MySQL

Để 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:00
  • MAX(...) - MIN(...): Hiệu số giây giữa lần đăng muộn nhất và sớm nhất
  • SEC_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;