MySql Group By 和 order by date

Posted

技术标签:

【中文标题】MySql Group By 和 order by date【英文标题】:MySql Group By and order by date 【发布时间】:2021-02-22 14:02:42 【问题描述】:

这是我的表格数据:

id      page_id     time            created
=======================================================
1       1           00:15:00        2020-11-05 09:55:54
2       1           00:25:00        2020-11-10 07:35:24
3       2           00:10:25        2020-11-06 06:15:20

这里是 mysql 查询:

SELECT
  a.* SUM (a.time) AS time
FROM
  `activity` AS a
GROUP BY a.page_id
ORDER BY a.created DESC;

想要的结果是让最新的记录显示在最前面,但相反,我得到了第一个记录在最前面;

喜欢:

2       1           00:25:00        2020-11-10 07:35:24
3       2           00:10:25        2020-11-06 06:15:20

相反,我得到了这个:

1       1           00:15:00        2020-11-05 09:55:54
3       2           00:10:25        2020-11-06 06:15:20

【问题讨论】:

你不能求和(时间)。您可以改为将时间转换为秒,将其相加,然后将其转换回时间 【参考方案1】:

您似乎想要id 的最新记录,由created 定义。如果是这样,您需要过滤而不是聚合。

在 MySQL 8.0 中,我建议使用窗口函数:

select *
from (
    select a.*,
        rank() over(partition by page_id order by created desc) rn
    from activity a
) a
where rn = 1
order by created desc

在早期版本中,您可以使用相关子查询进行过滤:

select a.*
from activity a
where a.created = (
    select max(a1.created) from activity a1 where a1.page_id = a.page_id
)

【讨论】:

谢谢,但这部分有效。我添加 SUM() 后,它只显示 1 条记录 @Alko:你不需要sum() 来获得你想要的结果。这会产生您为样本数据显示的结果。

以上是关于MySql Group By 和 order by date的主要内容,如果未能解决你的问题,请参考以下文章

mysql:group by,order by

mysql 用 group by 和 order by同时使用

MySQL GROUP BY 和 SELECT GROUP BY [重复]

Mysql之order by|group by 排序优化

MySQL 查询优化与 group by 和 order by rand

在 mysql 中使用 group by 查询和 order by 查询选择