sql >> Database >  >> RDS >> Oracle

Hoe verdeel je maanden over maanden en groepeer je maanden in een kwartaal?

Het probleem met de oplossing die je hebt geprobeerd, is dat je een stap mist.

Als uw kwartalen een maand afwijken van de "standaard" kwartalen, moet u - gegeven een datum, een willekeurige datum - de datum een ​​maand vooruitschuiven, daarna afkappen tot een kwartaal en dan een maand terugtrekken. Je hebt stap 2 en 3 gedaan, maar je mist stap 1.

with
  inputs ( dt ) as (
    select to_date('02-Jan-18', 'dd-Mon-yy') from dual union all
    select to_date('02-Feb-18', 'dd-Mon-yy') from dual union all
    select to_date('05-Mar-18', 'dd-Mon-yy') from dual union all
    select to_date('08-Apr-18', 'dd-Mon-yy') from dual union all
    select to_date('05-May-18', 'dd-Mon-yy') from dual union all
    select to_date('05-Jun-18', 'dd-Mon-yy') from dual union all
    select to_date('05-Jul-18', 'dd-Mon-yy') from dual union all
    select to_date('09-Aug-18', 'dd-Mon-yy') from dual union all
    select to_date('10-Sep-18', 'dd-Mon-yy') from dual union all
    select to_date('11-Oct-18', 'dd-Mon-yy') from dual union all
    select to_date('11-Nov-18', 'dd-Mon-yy') from dual union all
    select to_date('11-Dec-18', 'dd-Mon-yy') from dual
  )
select dt,
       add_months(trunc(add_months(dt, 1), 'q'), -1) as qtr
from   inputs;

DT          QTR     
---------   ---------
02-Jan-18   01-Dec-17
02-Feb-18   01-Dec-17
05-Mar-18   01-Mar-18
08-Apr-18   01-Mar-18
05-May-18   01-Mar-18
05-Jun-18   01-Jun-18
05-Jul-18   01-Jun-18
09-Aug-18   01-Jun-18
10-Sep-18   01-Sep-18
11-Oct-18   01-Sep-18
11-Nov-18   01-Sep-18
11-Dec-18   01-Dec-18


  1. 3 manieren om erachter te komen of een kolom een ​​berekende kolom is in SQL Server

  2. MySQL Help:Updatequery optimaliseren die de rangorde instelt volgens de volgorde van een andere kolom

  3. regexp voor alle tekens met accenten in Oracle

  4. De kosten van gratis PostgreSQL-publiciteit