Ecco lo scenario: Ho item x (item_id, customer_number, cost) che può essere inviato ad un altro sistema più volte nel corso dei mesi, il che può o non può rifiutare l'articolo x prima di accettarlo definitivamente ad un certo punto.
Requisito di segnalazione: Intervallo di date arbitrario per data di inizio e data di fine Vuoi restituire un numero univoco di elementi che sono stati rifiutati nell'intervallo di tempo (tieni presente che se l'elemento x è stato rifiutato tre volte in questo intervallo di tempo, vorremmo contenerlo una sola volta).
Dati di esempio realistici:
Item X Rejected 01/02/2014
Item X Rejected 01/03/2014
Item X Rejected 02/15/2014
Se voglio eseguire il report dal 01/01/2014 al 02/01/2014 per l'articolo x, dovrei ottenere un conteggio pari a 1 per l'intervallo. Diventa strano quando eseguo il report per gennaio, quindi lo eseguo anche a febbraio perché lo stesso elemento dovrebbe apparire come un conteggio di 1 per entrambi i mesi, ma lo eseguo per i primi 3 mesi dell'anno, ma dovrebbe essere solo mostra come conteggio di 1.
Il problema: Ho a che fare con miliardi di record sul database. Normalmente dovremmo solo pre-calcolare i totali per i dati e caricarli per mese. In questo caso non possiamo farlo perché durante l'esecuzione di intervalli di date arbitrari, febbraio e gennaio non possono essere sommati nell'esempio precedente poiché ciò comporterebbe un conteggio di 2 per l'elemento x invece del totale univoco di 1.
Domanda: C'è un modo per pre-calcolare i dati per i conteggi unici come questo per intervalli di date arbitrari? Qualcuno ha qualche suggerimento per l'ottimizzazione della segnalazione qui (non coinvolge il lancio di più hardware)?
Utilizziamo Oracle Database 11g.