表信息:
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/