selezionare record solo se l'intervallo fra loro non supera

Discussioni sulle caratteristiche di database
Rispondi
Avatar utente
marcofoc
Messaggi: 235
Iscritto il: martedì 12 ottobre 2010, 16:48
Località: Arzignano (VI)
Contatta:

selezionare record solo se l'intervallo fra loro non supera

Messaggio da marcofoc »

Ciao ragazzi.
Posto una domanda non propriamente per Openoffice. Sarebbe più per chi crea le strutture dei database.. ma magari qui c'è qualche genio di questo tipo.. e magari mi dà una dritta.

Passo subito all'esempio, così mi spiego meglio.

Ho una tabella così popolata:

11/4/11 Tizio
9/4/11 Caio
6/4/11 Sempronio
11/2/11 Marco
10/2/11 Stefano
5/2/11 Luigi

Ora, vorrei estrarre i record, partendo da quello più recente, e bloccare
l'estrazione nel momento in cui il record successivo sia più indietro di x
giorni (in questo caso 3). Quindi fermare la SELECT a Sempronio.
E non estrarre anche Marco e Stefano, anche se son vicini <3 giorni.
Mi sono spiegato?

Come potrei fare?

Marco
Non esistono buoni maestri senza buoni allievi...
giannidalmi
Messaggi: 62
Iscritto il: lunedì 21 febbraio 2011, 7:00

Re: selezionare record solo se l'intervallo fra loro non sup

Messaggio da giannidalmi »

ho fatto una funzioncina che trova la data a cui fermarsi
ti può servire?
ti allego la prova
ciao
Allegati
prova2.odb
(12.82 KiB) Scaricato 175 volte
open office 3.2.1
window 7
Avatar utente
marcofoc
Messaggi: 235
Iscritto il: martedì 12 ottobre 2010, 16:48
Località: Arzignano (VI)
Contatta:

Re: selezionare record solo se l'intervallo fra loro non sup

Messaggio da marcofoc »

scusa la mia inettitudine..
ma dove si trova la funzione?

Mi aspettavo di trovare una ricerca..
Non esistono buoni maestri senza buoni allievi...
giannidalmi
Messaggi: 62
Iscritto il: lunedì 21 febbraio 2011, 7:00

Re: selezionare record solo se l'intervallo fra loro non sup

Messaggio da giannidalmi »

la funzione è la macro 'trovadata'

Codice: Seleziona tutto

function TrovaData()
Dim oConnection As Object
dim Statement as object
dim ResultSet as object
dim doc as object
dim docCrl as object
dim Forms as object
dim Form as object
dim ID as integer
dim data as date  

oConnection=ConnettiDB("prova2")
	Statement = oConnection.createStatement()
	ResultSet = Statement.executeQuery("SELECT  data  FROM  Tabella1 ") 
	ResultSet.next
	data=ResultSet.getString(1)
	While ResultSet.next
		if DateValue(data)-Datevalue(ResultSet.getString(1))<4 then			
			msgbox "differenza date " & DateValue(data)-DateValue(ResultSet.getString(1))
			DataF=dateValue(ResultSet.getString(1))
			data=ResultSet.getString(1)
		end if 
	Wend	
	msgbox "data stop " & dataF
end function
per la verità la macro trova la data a cui fermarsi
la select potrebbe funzionare con l'istruzione BETWEEN 'primadata' e 'dataF'
si può provare
non ci avevo pensato, ho solo adattato una mia funzione al tuo problema
semmai appena ho tempo ci provo
ciao
open office 3.2.1
window 7
giannidalmi
Messaggi: 62
Iscritto il: lunedì 21 febbraio 2011, 7:00

Re: selezionare record solo se l'intervallo fra loro non sup

Messaggio da giannidalmi »

ho aggiunto la tabella che viene filtrata sulla dase della data trovata
purtoppo il filtro non funziona con la data ma con l'ID, cosa che porta problemi se le date non sono ordinate
in pratica ho aggiunto l'istruzione
oForm.Filter =" (""Tabella1"".""ID"" <= '" & IDenti & "' ) "
chi la può e vuole migliorare si faccia pure avanti
spero che il contributo serva
ciao
Allegati
prova2.odb
(13.71 KiB) Scaricato 154 volte
open office 3.2.1
window 7
Avatar utente
marcofoc
Messaggi: 235
Iscritto il: martedì 12 ottobre 2010, 16:48
Località: Arzignano (VI)
Contatta:

Re: selezionare record solo se l'intervallo fra loro non sup

Messaggio da marcofoc »

Aspetta Gianni.
Ti ringrazio molto per lo sforzo che stai facendo.. ma mi sto orientando diversamente.
La ricerca deve pronta per l'estrazione senza dovergli passare parametri (date).

A questo proposito devo iniziare a studiare le "window functions", feature di PostgreSQL.. motore database al quale mi collego con Ooo.

Presto posterò la soluzione.
Non esistono buoni maestri senza buoni allievi...
Rispondi