如何在我的数据集中获得每个月的 MAX/MIN 函数?

Posted

技术标签:

【中文标题】如何在我的数据集中获得每个月的 MAX/MIN 函数?【英文标题】:How to get MAX/MIN function for each month in my data set? 【发布时间】:2019-04-10 20:19:06 【问题描述】:

我需要提供使用数据,并且需要按月汇总。

在我的代码中,我只查看 2018 年 1 月的数据,因此根据当前数据集找到 Max 和 Min 非常简单。如果我要在 2018 年全年扩展它,我目前会显示全年的 MAX 和 MIN。

      SELECT DISTINCT
         bi_vwn_co_acct,
         bi_consumer_view_1.bi_format_name,
         bi_srv_loc.bi_city,
         bi_srv_loc.bi_st,
         bi_srv_loc.bi_x_coord,
         bi_srv_loc.bi_y_coord,
         bi_interval_rdgs.bi_mtr_nbr,
         MAX (bi_interval_rdgs.bi_rdg),
         MIN (bi_interval_rdgs.bi_rdg),
         (MAX (bi_interval_rdgs.bi_rdg) - MIN (bi_interval_rdgs.bi_rdg))
            AS monthusage
    FROM bi_srv_loc
         INNER JOIN bi_srv_link
            ON bi_srv_loc.bi_srv_loc_nbr = bi_srv_link.bi_srv_loc_nbr
         INNER JOIN bi_type_service
            ON bi_srv_link.bi_srv_loc_nbr = bi_type_service.bi_srv_loc_nbr
         INNER JOIN bi_consumer_view_1
            ON bi_type_service.bi_acct = bi_consumer_view_1.bi_vwn_co_acct
         INNER JOIN bi_interval_rdgs
            ON bi_srv_link.bi_mtr_nbr = bi_interval_rdgs.bi_mtr_nbr
   WHERE     bi_interval_rdg_dt_tm >= '01-JAN-2018'
         AND bi_interval_rdg_dt_tm <= '31-JAN-2018'
         AND bi_type_service.bi_srv_stat_cd IN ('1',
                                                '7',
                                                '18',
                                                '21',
                                                '22',
                                                '30')
GROUP BY bi_consumer_view_1.bi_vwn_co_acct,
         bi_consumer_view_1.bi_format_name,
         bi_srv_loc.bi_x_coord,
         bi_srv_loc.bi_y_coord,
         bi_interval_rdgs.bi_mtr_nbr,
         bi_srv_loc.bi_city,
         bi_srv_loc.bi_st

我希望得到一个看起来像这样的数据列表:

ACCT1 JAN MONTHUSAGE: 10
ACCT1 FEB MONTHUSAGE: 13
ACCT1 MAR MONTHUSAGE: 12
...
ACCT2 JAN MONTHUSAGE: 23
ACCT2 FEB MONTHUSAGE: 18

我的代码中显然显示了更多字段,但总的来说这是我所追求的。不知何故,我需要能够通过给定的日期范围并按月划分。任何帮助或指导将不胜感激!

【问题讨论】:

向我们展示一些示例表数据和预期结果。全部为格式化文本,而不是图像。 (开始之前先看看***.com/help/mcve。) 【参考方案1】:

将您的查询调整为 GROUP BY MONTH(BI_INTERVAL_RDG_DT_TM), YEAR(BI_INTERVAL_RDG_DT_TM )

【讨论】:

【参考方案2】:

我不确定我是否理解哪一列(在所有列中)代表数据值,所以 - 这是一个基于 Scott 的示例架构的示例,它可能会给你一些想法 - 提取 月份和年份信息超出日期列(例如,通过使用TO_CHAR 函数)并将其包含在GROUP BY 子句中。

SQL> select to_char(e.hiredate, 'yyyymm') mon,
  2         min(e.sal) minsal,
  3         max(e.sal) maxsal
  4  from emp e
  5  group by to_char(e.hiredate, 'yyyymm')
  6  order by to_char(e.hiredate, 'yyyymm');

MON        MINSAL     MAXSAL
------ ---------- ----------
198012        800        800
198102       1250       1600
198104       2975       2975
198105       2850       2850
198106       2450       2450
198109       1250       1500
198111       5000       5000
198112        950       3000
198201       1300       1300
198212       3000       3000
198301       1100       1100

11 rows selected.

SQL>

【讨论】:

以上是关于如何在我的数据集中获得每个月的 MAX/MIN 函数?的主要内容,如果未能解决你的问题,请参考以下文章

oracle中怎样以年为参数求出每个月数据的平均值以及月的最大值最小值

加入 PySpark 数据集中每个月的上个月数据

如何获得固定大小的 SIFT 特征向量?

如何在 Django 模型中存储每个月的数据

获取每个月 SQL 的组的 MAX 值

clojure 中的预聚合数据结构