【问题标题】:MySQL select group by date, arithmetic, then sum resultsMySQL按日期,算术,然后对结果求和
【发布时间】:2012-10-19 02:27:30
【问题描述】:

我有一个只有三列的表,ID、DATETIME、VALUE

每个 DATETIME 都来自一天中的各种样本,来自不同的仪表。

我需要对每个值执行一个数学函数,例如。 (value * 60 * 10)/1000000 = new_value,然后按 DATE(datetime) 对 new_value 进行分组,并对每个日期的值求和,然后对一组选定的 ID 执行此操作。

我需要的结果是每个 DATE,以及这些仪表的总和值。

我试过了:

SELECT date(sub_meter_data.date) as date, 
sum(CASE WHEN sub_meterID = '58984' OR '58985' OR '58986' OR '58987' THEN (((value*60)*10)/1000000) ELSE 0 END) as value
FROM `sub_meter_data` WHERE
date(sub_meter_data.date) > '2012-10-01'
GROUP BY date(sub_meter_data.date)

以下是一些示例数据:

sub_meterID       date           value
58984     2012-10-18 23:23:05.000   94.82643
58982     2012-10-18 23:28:52.000   97.43638
58984     2012-10-18 23:33:04.000   100.1923
58985     2012-10-18 23:43:01.000   97.93111
58984     2012-10-18 23:53:05.000   93.02759
58986     2012-10-19 00:03:03.000   88.29563
58984     2012-10-19 00:13:02.000   81.23074
58987     2012-10-19 00:23:07.000   86.37943
58984     2012-10-19 00:33:04.000   88.64834

【问题讨论】:

  • 您尝试的查询有什么问题?有什么错误吗?不是你想要的?
  • 您能否提供一些带有预期结果的示例数据以便于理解?
  • 结果是值的总和,然后是乘法/除法。我希望它乘除这些值,然后对结果求和。
  • 1) 不,您的查询做您想做的事:每个值都相乘和相除,结果相加。 2) 这没有区别,因为 a*60*10/1000000 + b*60*10/1000000 = (a+b)*60*10/1000000。请根据该样本数据显示您的“错误”结果。
  • 我现在又不太确定了。对列表中的每个仪表执行选择,并使用相同的公式,不会给出相应的结果。

标签: mysql case


【解决方案1】:

请尝试以下:

SELECT date(`date`), 
       sum(((value*60)*10)/1000000) 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`);

【讨论】:

  • 耶!谢谢塞尔,你的救命稻草!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2012-11-06
  • 2020-12-02
  • 2017-08-23
  • 2021-05-13
  • 2020-08-30
相关资源
最近更新 更多