SQL Results group by month

后端 未结 2 1315
醉酒成梦
醉酒成梦 2021-02-08 04:12

I\'m trying to return some results spread over a rolling 12 month period eg:

MONTH       IN   OUT
January    210    191
February   200    111
March      132    1         


        
相关标签:
2条回答
  • 2021-02-08 04:18

    Use:

      SELECT SUM(CASE WHEN p.problem_type = 'IN' THEN 1 ELSE 0 END) AS IN, 
             SUM(CASE WHEN p.problem_type = 'OUT' THEN 1 ELSE 0 END) AS OUT, 
             TO_CHAR(datetime, 'YYYY') AS year,
             TO_CHAR(datetime, 'MM') AS month
        FROM PROBLEM p
       WHERE p.DateTime >= TO_DATE('2010-01-01', 'YYYY-MM-DD') 
         AND p.DateTime < TO_DATE('2010-01-31', 'YYYY-MM-DD') 
    GROUP BY TO_CHAR(datetime, 'YYYY'), TO_CHAR(datetime, 'MM')
    

    You could also use:

      SELECT SUM(CASE WHEN p.problem_type = 'IN' THEN 1 ELSE 0 END) AS IN, 
             SUM(CASE WHEN p.problem_type = 'OUT' THEN 1 ELSE 0 END) AS OUT, 
             TO_CHAR(datetime, 'MM-YYYY') AS mon_year
        FROM PROBLEM p
       WHERE p.DateTime >= TO_DATE('2010-01-01', 'YYYY-MM-DD') 
         AND p.DateTime < TO_DATE('2010-01-31', 'YYYY-MM-DD') 
    GROUP BY TO_CHAR(datetime, 'MM-YYYY')
    

    Reference:

    • TO_CHAR
    • TO_DATE
    0 讨论(0)
  • 2021-02-08 04:31

    You probably want something like

    SELECT SUM( (CASE WHEN problem_type = 'IN' THEN 1 ELSE 0 END) ) in,
           SUM( (CASE WHEN problem_type = 'OUT' THEN 1 ELSE 0 END) ) out,
           EXTRACT( year FROM DateTime ) year,
           EXTRACT( month FROM DateTime ) month
      FROM problem
     WHERE DateTime >= date '2010-01-01'
       AND DateTime < date '2010-01-31'
     GROUP BY EXTRACT( year FROM DateTime ),
              EXTRACT( month FROM DateTime )
    
    0 讨论(0)
提交回复
热议问题