Mondi su mondi, sistemi di sistemi.

PostgreSQL: generare una sequence “al volo”

A volte cápita di dover numerare i record durante la creazione di report. Una soluzione abbastanza nota è quella di tenere a disposizione una tabella (eventualmente temporanea) che non contiene altro che una sequenza di numeri a 1 a n.

Con PostgreSQL esiste una soluzione più elegante: generate_series. Con questa funzione pos­siamo scrivere 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 partire a partire dal primo Gennaio 2007.

Per proseguire

Commenti e trackback sono disabilitati.