Mondi su mondi, sistemi di sistemi.

PostgreSQL: generare una sequence “al volo”

A volte cápita di dover nume­rare i record durante la crea­zione di report. Una solu­zione abba­stanza nota è quella di tenere a dispo­si­zione una tabella (even­tual­mente tem­po­ra­nea) che non con­tiene altro che una sequenza di numeri a 1 a n.

Con PostgreSQL esi­ste una solu­zione più ele­gante: generate_series. Con que­sta fun­zione pos­siamo scri­vere una query come questa:

 

SELECT pdays.doy, SUM(o.order_total) As sales_total
FROM (SELECT CAST('2007-01-01' As date) + n As doy
		FROM generate_series(0,364) n ) pdays
			INNER JOIN orders o ON o.sale_date = pdays.doy;
GROUP BY pdays.doy
ORDER BY pdays.doy

 

dove pdays è la sequenza di tutti i giorni a par­tire a par­tire dal primo Gennaio 2007.

Per proseguire

Commenti e trackback sono disabilitati.