我想在发送者或接收者 = 002 的表中获取发送者和接收者之间的最新创建日期,然后按发送者和接收者分组。最后从002的角度通知成员是发送者还是接收者。
这只是一个示例数据。
表格
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
结果应该是这样的
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
到目前为止我已经尝试过:
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
这是我最后得到的结果。
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
我很难获得最新的当前行,但 create_date 没问题。
2) 我也尝试过使用内部连接。
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
这仅适用于检索最新的行记录。但是,如果我需要检索具有最新 create_date 但按发送者和接收者分组的行怎么办?
最佳答案
你可以在一个单一的选择中完成,用一个案例
select
case when sender='002' then receiver else sender end as member, -- # knowing that either sender or receiver are 002, take the other.
case when sender='002' then 'receiver' else 'sender' end as type,
max(date)
from table
where sender = '002' or receiver = '002'
group by 1,2
关于MYSQL 最大日期按两列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33563753/