sql - 基于月份的预言机计数

标签 sql oracle

我正在尝试编写 Oracle SQL。

我正在寻找类似的解决方案。请查找我拥有的以下数据

start_date      end_date        customer 
01-01-2012      31-06-2012      a 
01-01-2012      31-01-2012      b  
01-02-2012      31-03-2012      c  

我想要该日期期间的客户数量。我的结果应如下所示

Month   : Customer Count 
JAN-12  :  2 
FEB-12  :  2 
MAR-12  :  2 
APR-12  :  1 
MAY-12  :  1 
JUN-12  :  1 

最佳答案

一种选择是在另一个查询中单独生成月份并将其连接到您的数据表(请注意,我假设您希望客户 A 的结束日期为 2012 年 6 月 30 日,因为没有 6 月31)。

SQL> ed
Wrote file afiedt.buf

  1  with mnths as(
  2    select add_months( date '2012-01-01', level - 1 ) mnth
  3      from dual
  4   connect by level <= 6 ),
  5  data as (
  6    select date '2012-01-01' start_date, date '2012-06-30' end_date, 'a' customer from dual union all
  7    select date '2012-01-01', date '2012-01-31', 'b' from dual union all
  8    select date '2012-02-01', date '2012-03-31', 'c' from dual
  9  )
 10  select mnths.mnth, count(*)
 11    from data,
 12         mnths
 13   where mnths.mnth between data.start_date and data.end_date
 14   group by mnths.mnth
 15*  order by mnths.mnth
SQL> /

MNTH        COUNT(*)
--------- ----------
01-JAN-12          2
01-FEB-12          2
01-MAR-12          2
01-APR-12          1
01-MAY-12          1
01-JUN-12          1

6 rows selected.

关于sql - 基于月份的预言机计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020421/

相关文章:

sql - 使用 avg 绘制查询树?

sql - Postgres : one table with many columns or several tables with fewer columns?

sql - 如何在 Vertica 中创建外部程序

mysql - 如何识别并更新一半的重复记录

node.js - Sequelize-Oracle 即使限制超过 100 也只返回 100 行

sql - SSRS - 详细信息行中的垂直合并单元格

sql - 'JSON' 附近的语法不正确 - SQL Server 2014

sql - Oracle 优化器尴尬地不喜欢使用索引

oracle - 在 Oracle PL/SQL 中格式化回车符、换行符

Oracle 分析表命令