表信息:

Date, Hour, Object, Data1, Data2,............, Data20,........,Data50.


即每个对象每天都有24小时的数据。

现在,我需要找出特定日期所有数据的结果(一行),其中data20在24行中最大。提前致谢...

喜欢:

SELECT
    *
FROM
    `Table1`
WHERE
    `Date`='2013-12-08'
AND
    `object`='xxxx1'
AND
    `Data20` = (SELECT MAX(`Data20`) WHERE `Date` = '2013-12-08' AND `object`='xxxx1').


这将为对象xxxx1提供最大结果。但是我需要为所有对象提供类似的结果,即删除条件object ='xxxx1'。我怎样才能做到这一点???

最佳答案

您可以只使用LEFT JOIN,只保留不存在具有相同objectid,相同日期和更大data20值的另一行的行;

SELECT t1.*
FROM table1 t1
LEFT JOIN table1 t2
  ON t1.object=t2.object
 AND t1.date = '2013-12-08'
 AND t2.date = '2013-12-08'
 AND t1.data20 < t2.data20
WHERE t2.date IS NULL;


...或另一种选择是重写您的旧查询;

SELECT *
FROM Table1
WHERE date = '2013-12-08'
  AND DATA20=(SELECT MAX(Data20)
              FROM Table1 t1
              WHERE date = '2013-12-08'
                AND t1.object=table1.object)


http://sqlfiddle.com/#!2/c5218/7“>测试两者的SQLfiddle。

如果netiher可以为您提供所需的性能,请在问题中添加EXPLAIN输出,以便可以看到实际的索引使用情况。

关于mysql - SQL查询以获取最大数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20586414/

10-12 16:26
查看更多