2013-02-12 14 views
5

Abbiamo dati orders e dobbiamo generare il rapporto Weekly - Custom date Range of 7 Days utilizzando SQL. Il rapporto mostrerà settimanalmente count di ordini. L'utente seleziona uno End Date e abbiamo bisogno di creare 12 unità DateRange in base a tale data. Per esempio l'utente seleziona 1/24/2013 abbiamo bisogno di 12 punti/Unità come:È questo il modo migliore per scrivere SQL per questo rapporto?

Point12 = End Date - 7 Days 
Point11 = End Date - 14 Days 
Point10 = End Date - 21 Days 
Point9 = End Date - 28 Days 
. 
. 
Point1 = End Date - X Days 

La nostra soluzione:

Stiamo progettando di creare una tabella temporanea quel tavolo avrà 12 righe. Ogni riga avrà dati come (calcoleremo lo StartDate e endDate per ogni punto):

Point StartDate   EndDate  TotalOrders 
Point12 2013-01-24   2013-01-30 
Point11 2013-01-17   2013-01-23 

Dopo questo avremo la count degli Ordini per ogni riga.

Questa è una buona soluzione a questo problema o può essere ottimizzata?

EDIT:

Il DateRange settimanale sarà un Custom date Range of 7 Days.

enter image description here

+0

@EdHeal: Posso farlo da solo. ma voglio solo sapere che lo sto facendo nel miglior modo possibile. –

+1

in questo scenario è necessario utilizzare la variabile Tabella per prestazioni migliori. Puoi leggere questo articolo sulla differenza: http://www.sql-server-performance.com/2007/temp-tables-vs-variables/ –

+0

Come stai ottenendo il "conteggio" per ogni riga? – msmucker0527

risposta

-1

Perché non basta usare la settimana come raggruppamento fattore?

SELECT 
WEEKOFYEAR(`date`) AS point, 
SUM(orders) AS order 
FROM `tablename` 
WHERE `date` BETWEEN `startdate` AND `enddate` 
GROUP BY point 
1

Dato che si tratta di SQLServer, suggerisco di utilizzare una variabile di tabella anziché una tabella temporanea.

Un approccio alternativo sarebbe quello di generare le 12 righe in un CTE come parte della query principale, piuttosto che generare le righe richieste (in una variabile di tabella/tabella temporanea) come un passaggio separato prima della query principale. Ciò ridurrebbe il numero totale di passaggi richiesti, ma renderebbe la query principale leggermente più complicata.

+0

Quale razionale per il consiglio "Suggerisco di usare una variabile di tabella, piuttosto che una tabella temporanea."? Non necessariamente non sono d'accordo, ma dovresti indicare il beneficio che ritieni possa essere ottenuto. –

+0

Questo è un mito. Sia le variabili di tabella che le tabelle '# temp' sono mantenute in' tempdb' e probabilmente entrambe avranno tutte le pagine in memoria per una tabella così piccola. –

+0

Vedere questo articolo MSDN: http://msdn.microsoft.com/en-us/library/ms175010.aspx –

Problemi correlati