MYSQL 最大日期按两列分组

标签 mysql group-by max

我想在发送者或接收者 = 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/

相关文章:

Excel 在索引列表中查找最大的部分值

php - 我如何显示来自mysql特定月份的数据

mysql - 如何将数据库中的值存储为变量以在插入语句中使用

python - Python Pandas 中的 Groupby/Sum - 零计数不显示......有时

python - 使用 pandas 聚合基于其他列的结果

algorithm - 给定一定数量的数字集,找到一组不包括任何给定数字的数字集

javascript - 如何从mysql/knexjs中提取重复输入错误(1062)的键

php - 通过 URL 2 Var 发送(1 个已选择且 1 个已登录用户)

sql - 选择两列组合唯一的行,我们只显示第一列不唯一的行

javascript - 在 Javascript 数组中查找绝对最大值