Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql按一个字段分组,按另一个字段排序_Mysql_Sql - Fatal编程技术网

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

Mysql按一个字段分组,按另一个字段排序,mysql,sql,Mysql,Sql,也许这个问题是重复的,但我找不到我的任务的答案。我有下一个表,其中包含以下数据: 我需要为每个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

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

我需要为每个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;
我想得到这个结果:

SELECT `oid`, `pvalue`
FROM `report` AS `r1`
WHERE `deviceid` = 'MRA-1011'
  AND `date` <= '2012-01-20 00:00:00'
  AND `date` = ( SELECT MAX(`date`) 
                 FROM `report` AS `r2` 
                 WHERE `r1`.`oid` = `r2`.`oid`
               )
;

您需要沿以下行使用子选择:

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不是唯一的,您可能希望在外部查询中按它分组

以获得该结果,您必须

ORDER BY `date` ASC:

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

SELECT `oid`, `pvalue`, `date`, MAX(`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;

请添加这些查询的结果以及您希望从中获得的内容。\@sashi kant,请查看更正我的问题!这里有一个小错误。在定义报表r的括号外不能有r.oid。这不适用于我,因为日期不依赖于分组依据