表格信息:
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'。我该怎么办?
答案 0 :(得分:0)
你可以使用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“&gt;测试两者的SQL小提琴。
如果netiher为您提供所需的性能,请将EXPLAIN
输出添加到您的问题中,以便可以查看实际的索引使用情况。