sql >> Database >  >> RDS >> PostgreSQL

Hoe een virtuele tabel genereren om een ​​reeks datums in PostgreSQL te genereren?

Lijst met datums

Gebruik de generate_series functie om een ​​lijst met nummers te krijgen die u aan een datum kunt toevoegen om een ​​lijst met datums te krijgen:

SELECT CURRENT_DATE + s.a AS dates 
  FROM generate_series(0,14,7) as s(a);

Resultaat:

dates
------------
2004-02-05
2004-02-12
2004-02-19

Draaien

Het laatste deel van uw vraag gaat over het draaien van de resultatenset - het converteren van rijgegevens naar kolomgegevens. PIVOT en UNPIVOT zijn ANSI, maar ik zie ze niet als ondersteund door PostgreSQL momenteel . De meest consistent ondersteunde manier om een ​​query te draaien is het gebruik van aggregatiefuncties:

   SELECT t.account,
          SUM(CASE WHEN t.date = '2010-01-01' THEN t.amount END) AS '2010-01-01',
          SUM(CASE WHEN t.date = '2010-01-02' THEN t.amount END) AS '2010-01-02',
          SUM(CASE WHEN t.date = '2010-01-03' THEN t.amount END) AS '2010-01-03',
          SUM(t.amount) AS Balance
     FROM (SELECT CURRENT_DATE + s.a AS dates 
             FROM generate_series(0,14,7) as s(a)) x
LEFT JOIN TRANSACTIONS y ON y.date = x.date
 GROUP BY t.account

Dynamische kolommen

...betekent dynamische SQL .




  1. Hoe kan ik het verschil in uren tussen twee datums krijgen?

  2. CSV naar Mysql importscript om overeen te komen met velden

  3. Twitter-fout tijdens delen

  4. JDBC maakt verbinding met Oracle-database met SSL