【问题标题】:Get the difference between the min en max value group by month按月获取最小值和最大值组之间的差异
【发布时间】:2020-06-11 20:02:16
【问题描述】:

我有一个包含两列的数据库。

Column 1: named as datum (datetime format)
Column 2: named as Energie (decimal format).

2019-01-01 14:17:07;3419.699951
2019-01-01 14:48:38;3419.800049
2019-01-01 15:12:35;3419.900146
2019-01-01 15:34:26;3420.100098
2019-01-01 15:58:10;3420.300049
2019-01-01 16:21:36;3420.5
2019-01-01 17:20:03;3420.699951
2019-01-01 17:32:11;3420.800049
2019-01-01 17:56:17;3421
2019-01-02 04:40:50;3421.100098
2019-01-02 05:46:28;3421.299805
2019-01-02 05:55:49;3421.400146
2019-01-02 06:41:54;3421.599854
2019-01-02 07:03:16;3421.700195
2019-01-02 07:26:59;3421.899902
2019-01-02 07:39:02;3422
2019-01-02 07:50:57;3422.100098
2019-01-02 08:50:53;3422.300049
2019-01-02 09:12:43;3422.5
2019-01-02 09:24:47;3422.600098

我想计算每个月第 2 列中的最小值和最大值之间的差异,并将每个月的结果分组。

到目前为止,我有以下 SQL 语句导致每天的差异。

select  cast(datum as date) AS datum, (max(energie) - min(energie)) as Energie_MWh
from    `01` as p
group by 
cast(datum as date)

【问题讨论】:

  • 样本数据和预期输出将在这里有所帮助。另外,MySQL SQL Server...您实际使用的是哪个数据库?
  • @TimBiegeleisen 我编辑了我的帖子并在其中插入了一些数据。不知道我的做法是否正确,但总比没有好。

标签: mysql sql


【解决方案1】:

如果您每天都在获取数据并且想要一个月的数据,那么您可以使用DATE_FORMAT(cast(datum as date), "%Y%m") 而不是cast(datum as date)

【讨论】:

    【解决方案2】:

    这些行适用于 MySQL:

    select DATE_FORMAT(datum, "%Y%m")  as date_month,
       max(energy)                 as max_engery,
       min(energy)                 as min_energy,
       (max(energy) - min(energy)) as diff
    from energy_table
    group by date_month;
    

    但我想知道这是否是能源使用的真正问题?

    如果表很大,会导致性能问题。

    【讨论】:

    • 问题在于能量被保存为一个累加值。我们需要每年报告每月的能源消耗。但我认为当计算导致性能问题时我清空了数据库。
    【解决方案3】:

    MySQL 为extract() 提供了非常方便的YEAR_MONTH 选项,因此您可以使用:

    select extract(year_month from datum) as yyyymm,
           (max(energie) - min(energie)) as Energie_MWh
    from `01` as p
    group by yyyymm;
    

    【讨论】:

      猜你喜欢
      • 2020-04-30
      • 2017-03-04
      • 2012-10-09
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多