Mysql按一个字段分组,按另一个字段排序

标签 mysql sql

也许这个问题是重复的,但我找不到适合我的任务的答案。我有下一张包含以下数据的表格:

full table data

我需要选择具有唯一 oid 和每个 oid 的最大日期的数据。我有这些查询,但它们无法正常工作:

SELECT `oid`, `pvalue`, `date`
FROM `report`
WHERE `deviceid` = 'MRA-1011'
  AND `date` <= '2012-01-20 00:00:00'
GROUP BY oid
HAVING `date` = MAX(`date`)
ORDER BY `date` DESC;

SELECT `oid`, `pvalue`
FROM `report`
WHERE `deviceid` = 'MRA-1011'
  AND `date` <= '2012-01-20 00:00:00'
GROUP BY oid
ORDER BY `date` DESC;

我想得到这个结果:

correct result

最佳答案

您需要按照以下方式使用子选择:

SELECT oid, pvalue FROM report
JOIN (SELECT oid, MAX(date) AS maxDate FROM report r WHERE `deviceid` = 'MRA-1011'
AND `date` <= '2012-01-20 00:00:00' GROUP BY oid) AS foo
ON foo.oid=r.oid AND foo.maxDate = report.date;

如果 report.date 不是唯一的,您可能希望在外部查询中按它分组

关于Mysql按一个字段分组,按另一个字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8786135/

相关文章:

php - 如果未输入,则不传递自定义变量

mysql - 计算上类时间和下类时间时间戳之间的小时和分钟

mysql - 有没有办法计算一组 mysql 列中的值

php - 按mysql表分组

mysql查询,从3个表中选择

sql - INNER JOIN 查询使用三个表返回符合条件的行的计数和总和

MYSQL SELECT 列中 ""之间的多个值

php - 如何从表字段中获取最高值

mysql - SQL 过滤掉 if manytomany_id = x

php - 如何使用codeigniter中的mysql编码功能插入数据