2014-10-09 83 views
0

嗨,我一直在这个项目上工作,需要得到这个。提取一个月的总天数,然后用它来获得每天的平均销售额

SELECT sf.ORDER_QNT, dd.ACTUAL_DATE, dd.MONTH_NUMBER 
FROM sales_fact sf, 
     date_dim dd 
WHERE dd.date_id = sf.date_id 
AND dd.MONTH_NUMBER = 1; 

结果如下:

ORDER_QNT ACTUAL_DATE MONTH_NUMBER 
---------- ----------- ------------ 
     1100 05/01/13   1 
     100 05/01/13   1 
     140 06/01/13   1 
     110 07/01/13   1 
     200 08/01/13   1 
     500 08/01/13   1 
     230 08/01/13   1 
     500 08/01/13   1 
     200 08/01/13   1 
     53 15/01/13   1 
     53 22/01/13   1 

现在,我想要得到的平均当月(每天平均)。

SELECT sum(sf.ORDER_QNT)/31 as AVGPERDAY 
FROM sales_fact sf, 
     date_dim dd 
WHERE dd.date_id = sf.date_id 
AND  dd.MONTH_NUMBER = 1; 

问题是,我怎样才能得到每月的总日数?以及如何将其应用于SELECT查询。我对逻辑(C++)非常好,但这个数据库对我来说很新。顺便说一句,我正在使用Oracle 11g。感谢您的任何帮助。

回答

0

问题是,我怎样才能得到每月的总日子?

选择任何一个解决方案:

1. 你可以一个月添加到一个日期和两。减去日期:

ADD_MONTHS(date_col, 1) - date_col

例子:

SQL> WITH dates AS(
    2 SELECT to_date('05/01/13','mm/dd/rr') dt FROM dual UNION ALL 
    3 SELECT to_date('06/01/13','mm/dd/rr') dt FROM dual UNION ALL 
    4 SELECT to_date('02/01/13','mm/dd/rr') dt FROM dual) 
    5 SELECT ADD_MONTHS(dt, 1) - dt num_of_days_per_month 
    6 from dates 
    7/

NUM_OF_DAYS_PER_MONTH 
--------------------- 
        31 
        30 
        28 

或者,

  • 可以提取该月的最后一天:
  • EXTRACT(DAY FROM LAST_DAY (date_col))

    实施例:

    SQL> WITH dates AS(
        2 SELECT to_date('05/01/13','mm/dd/rr') dt FROM dual UNION ALL 
        3 SELECT to_date('06/01/13','mm/dd/rr') dt FROM dual UNION ALL 
        4 SELECT to_date('02/01/13','mm/dd/rr') dt FROM dual) 
        5 SELECT EXTRACT(DAY FROM LAST_DAY(dt)) num_of_days_per_month 
        6 from dates 
        7/
    
    NUM_OF_DAYS_PER_MONTH 
    --------------------- 
            31 
            30 
            28 
    
    相关问题