我需要提供使用情况数据,并需要按月汇总。
在我的代码中,我仅查看2018年1月,因此根据当前数据集查找最大值和最小值非常简单。如果要在2018年全年进行扩展,我目前将显示全年的最大值和最小值。
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
我的代码中显然显示了更多字段,但总的来说,这就是我所追求的。我需要以某种方式能够遍历给定的日期范围并按月划分。任何帮助或指导将不胜感激!
答案 0 :(得分:0)
将查询调整为GROUP BY MONTH(BI_INTERVAL_RDG_DT_TM), YEAR(BI_INTERVAL_RDG_DT_TM )
答案 1 :(得分:0)
我不确定我是否理解(所有这些列中的)哪一列代表数据值,所以-这是一个基于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>