2012-10-19 75 views
2

我想要一个查询,获取按天分组的最大值和最小值之间的差异。我尝试不起作用:MySQL获取选定行的最大值和最小值之间的差异

SELECT date(`date`), 
    (max(value) - min(value)) as value, 
FROM `sub_meter_data` 
where date(sub_meter_data.date) > '2012-10-01' 
    and sub_meterID in('58984','58985','58986','58987') 
group by date(`date`); 

每个sub_meter有可能是> 3000的值,但只能通过< 10每天不同。我想要的差异,即结果< 10.通过上面的查询,我得到的结果> 3000。

下面的查询,只选择一个米,并给出正确的结果,最大值(17531),最小值(17523)和差值(8)。

SELECT date(sub_meter_data.date) as date, 
    max(value) as max_meter, 
    min(value) as min_meter, 
    max(value) - min(value) as diff, 
FROM `sub_meter_data` 
where date(sub_meter_data.date) > '2012-10-01' 
    and sub_meterID in('57636') 
    group by date(sub_meter_data.date) 

但添加另一个米到条款,给出一个坏的结果,最大为17531,和最小是3021,该差异是14510.但我想每个流量计的差异,然后相加。

SELECT date(sub_meter_data.date) as date, 
    max(value) as max_meter, 
    min(value) as min_meter, 
    max(value) - min(value) as diff, 
    FROM `sub_meter_data` 
where date(sub_meter_data.date) > '2012-10-01' 
    and sub_meterID in('57636', '57628') 
    group by date(sub_meter_data.date) 

我已经试过另一种尝试:

SELECT date(sub_meter_data.date) as date, 
    sum(CASE WHEN sub_meterID = '57628' OR sub_meterID = '57636' THEN (max(value) -  min(value)) ELSE 0 END) as value 
    FROM `sub_meter_data` 
where date(sub_meter_data.date) > '2012-10-01' 
+0

相关:http://stackoverflow.com/questions/4152781/sql-max-and-min-time-between-two-fields-changing ?rq = 1 http://stackoverflow.com/questions/8072231/mysql-how-to-select-minium-and-maximum-in-one-union-query?rq=1 – twodayslate

+0

什么是不适合你的查询?错误消息,无效数据?你能提供一个答案的例子吗? – doublesharp

+0

我得到一个结果,但数字太高。我会详细介绍上面的预期结果。 – user1745767

回答

5

查询只能由日(日)分组,但你要组也计,所以你需要添加到您的group by

select sub_meterID, date(`date`) as day, max(value) - min(value) as value 
from `sub_meter_data` 
where date(`date`) > '2012-10-01' 
    and sub_meterID in ('58984','58985','58986','58987') 
group by sub_meterID, date(`date`); 

然后,如果你要总结一天的不同,你可以这样做:

select day, sum(diff) as total_diff 
from (
    select sub_meterID, date(`date`) as day, max(value) - min(value) as diff 
    from `sub_meter_data` 
    where date(`date`) > '2012-10-01' 
     and sub_meterID in ('58984','58985','58986','58987') 
    group by sub_meterID, date(`date`) 
    ) a 
group by day 

或者,如果你想通过仪表来概括:

select sub_meterID, sum(diff) as total_diff 
from (
    select sub_meterID, date(`date`) as day, max(value) - min(value) as diff 
    from `sub_meter_data` 
    where date(`date`) > '2012-10-01' 
     and sub_meterID in ('58984','58985','58986','58987') 
    group by sub_meterID, date(`date`) 
    ) a 
group by sub_meterID 
+0

哇!你给出的“总计米”例子是现货。非常感谢。我必须研究该查询并理解它。谢谢Xint0。 – user1745767

相关问题