Tôi muốn nhận ngày tạo mới nhất giữa người gửi và người nhận trong bảng của tôi nơi người gửi hoặc người nhận = 002 và sau đó nhóm theo người gửi và người nhận. Cuối cùng, thông báo cho dù thành viên là người gửi hoặc người nhận từ chế độ xem của 002.MYSQL Nhóm ngày tối đa theo hai cột
Đây chỉ là dữ liệu mẫu.
bảng
id sender | receiver | create_date
1 001 002 2015-10-13 10:30:01
2 003 002 2015-11-06 15:30:59
3 001 002 2015-11-02 05:30:01
4 001 002 2015-11-03 11:08:22
5 002 004 2015-10-20 12:15:36
6 002 004 2015-11-03 17:35:10
7 002 005 2015-09-01 06:02:20
8 002 001 2015-11-06 15:10:32
Kết quả sẽ giống như thế này
id | member | type | create_date
2 003 sender 2015-11-06 15:30:59
6 004 receiver 2015-11-03 17:35:10
7 005 receiver 2015-09-01 06:02:20
8 001 receiver 2015-11-06 15:10:32
Cho đến nay tôi đã cố gắng:
1)
SELECT
id,
IF(sender <> '002', sender, receiver) AS member,
IF(sender <> '002', 'sender', 'receiver') AS type,
MAX(create_date) AS max_date
FROM
table
WHERE
sender = '002' OR receiver = '002'
GROUP BY
member
Đây là kết quả tôi nhận được ở cuối.
id | member | type | create_date
1 001 sender 2015-11-06 15:10:32
2 003 sender 2015-11-06 15:30:59
5 004 receiver 2015-11-03 17:35:10
7 005 receiver 2015-09-01 06:02:20
Tôi cố gắng để có được dòng mới nhất nhưng không có vấn đề với create_date.
2) Tôi đã thử sử dụng tham gia bên trong.
SELECT
*
FROM
table a
INNER JOIN
(
SELECT
id,
MAX(create_date) as max_date
FROM
table
WHERE
sender = '002' OR receiver = '002'
) b ON b.max_date = a.create_date
này hoạt động tốt để lấy kỷ lục hàng mới nhất mà thôi. Nhưng nếu tôi cần truy xuất các hàng với create_date mới nhất nhưng nhóm theo người gửi và người nhận thì sao?
Đây là cách để đi nếu bạn không cần 'id'. – vhu
@vhu đúng, tôi đã bỏ lỡ điều đó. Nếu bạn muốn ID, bạn sẽ phải tham gia trở lại điều này. Nếu ID là theo thứ tự như ngày tạo mặc dù, bạn chỉ có thể lấy tối đa (id) là tốt – AdrianBR