mysql 选择每个项目的最大日期

标签 mysql sql

我有下表:

帖子

| id | message         |
| 1  | a message       |
| 2  | another message |

posts_summaries

| post_id | datetime            | param    | value  | 
| 1       | 2016-06-06 09:01:09 | like     | 100    | 
| 1       | 2016-06-06 09:01:11 | reach    | 700    | 
| 1       | 2016-06-06 09:01:07 | comments | 80     | 
| 1       | 2016-06-06 10:01:06 | like     | 180    | 
| 1       | 2016-06-06 10:01:12 | reach    | 1200   | 
| 1       | 2016-06-06 10:01:09 | comments | 92     | 
| 2       | 2016-06-06 09:01:09 | like     | 94     | 
| 2       | 2016-06-06 09:01:11 | reach    | 600    | 
| 2       | 2016-06-06 09:01:07 | comments | 50     | 
| 2       | 2016-06-06 10:01:06 | like     | 133    | 
| 2       | 2016-06-06 10:01:12 | reach    | 1100   | 
| 2       | 2016-06-06 10:01:09 | comments | 93     | 

每小时,每个帖子的当前数据都会存储在 post_summaries 表中。 现在我只想加载帖子中的最新数据。所以对于帖子 2 来说就是

| 2       | 2016-06-06 10:01:06 | like     | 133    | 
| 2       | 2016-06-06 10:01:12 | reach    | 1100   | 
| 2       | 2016-06-06 10:01:09 | comments | 93     | 

我尝试使用以下方法来做到这一点:

 select param, value, MAX(date) from posts_summaries WHERE post_id = 2 GROUP BY param

但这会返回具有最新日期的最旧数据,因此:

| 2       | 2016-06-06 10:01:06 | like     | 94     | 
| 2       | 2016-06-06 10:01:12 | reach    | 600    | 
| 2       | 2016-06-06 10:01:09 | comments | 50     | 

所以它给了我 2016-06-06 09 的行,但日期为 2016-06-06 10。

我可以使用什么查询来获取每个参数的最新数据,其中 post_id = 2

提前致谢!

最佳答案

一种方法是使用 where 子句获取每个参数的最后一个值:

select ps.*
from post_summaries ps
where ps.post_id = 2 and
      ps.datetime = (select max(ps2.datetime)
                     from post_summaries ps2
                     where ps2.post_id = ps.post_id and ps2.param = ps.param
                    );

如果您知道总是有三个参数并且它们被插入在一起,那么这会更容易:

select ps.*
from post_summaries ps
where ps.post_id = 2
order by ps.datetime desc
limit 3;

关于mysql 选择每个项目的最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44388617/

相关文章:

MySQL从最早的一天计算连续天数

sql - Transact-SQL 中是否有与 typedef 等效的东西?

mysql - 选择从 1 列计数到 2 列

mysql - 根据 SQL 中的其他两列计算不同的属性值

sql - 字符串或二进制数据将被截断,字段查找

c# - 如何匹配 UDT T-SQL 和 C# CLR 类型?

mysql - 对具有多个 ID 的行求和

mysql - 按 ASC 排序 DATE_FORMAT '%Y-%c'

mysql - 在 MySQL 中搜索 "whole word match"

MySQL,获取开始日期和结束日期列之间的数据?