Newsgroup: it.comp.appl.access
Titolo: query di accodamento

buongiorno,
 
ho la seguente tabella:
 
CF, data_in, data_out
 
vorrei creare una query di accodamento che accodi il record solo se la 
data out è maggiore della data_out contenuta in tabella e l'accodamento 
deve avvenire una sola volta per data
come impostare il criterio?
 
grazie per l'aiuto
 
-- 
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 

Non sono certo di aver capito...
 
INSERT INTO TDest (fld1, DataOut,...fldn)
SELECT fld1, DataOut,...fldn FROM TOrig
WHERE TDest.DataOut<TOrig.DataOut
 
Se ho capito...
-- 
@Alex
 
 
----Android NewsGroup Reader----
https://piaohong.s3-us-west-2.amazonaws.com/usenet/index.html
 

 
 
 
cosa intendi esattamente con
"una sola volta per data"
 
BFS

 BFS
 
Credo intenda quanto hai già concepito.
Una cosa che con una sola query è impossibile fare.
Occorrerebbe avere un campo nella tabella da definire TRUE
al primo accodamento e, con quel TRUE, relativamente a
quella data evitarne altri.
 
Bruno

 
Sì, è quello che ho scritto anche io ma i record sono accodati più volte :-(



ci provo!


Sě, č quello che ho scritto anche io ma i record sono accodati piů
 volte :-(
 
Come ti ho premesso probabilmente non ho compreso a fondo il
 tema... e se non lo spieghi bene come ha indicato anche BSF
 facciamo poco...


 
l'accodamento si deve avere ogni volta che c'è un cambio di data, ma 
voglio che si accodi il record una sola volta, con la query data il 
record si accoda tutte le volte che viene richiamata la query.
 
avevo pensato di cancellare la sorgente una volta acquisita ma proviene 
da un file excel.
 
esempio pratico, nella tabella da alimentare ho questo record
 
tizio, 1/1/20, 31/12/20
 
nella tabella sorgente ho questa riga
 
tizio, 1/1/21, 31/12/21
 
la query verifica che 31/12/21 > 31/12/20
 
e accoda il record creando
 
tizio, 1/1/20, 31/12/20
tizio, 1/1/21, 31/12/21
 
il mio problema è che se richiamo la query accade
 
tizio, 1/1/20, 31/12/20
tizio, 1/1/21, 31/12/21
tizio, 1/1/21, 31/12/21
 
questa situazione è indesiderata, il record non deve accodarsi
 
spero di essere stato chiaro
 
Grazie



INSERT INTO destinazione ( cf, datain, dataout )
SELECT cf, datain, dataout
FROM sorgente
WHERE sorgente.dataout not in (select dataout from destinazione where 
sorgente.cf
=
destinazione.cf
  );
 
 
da un primo controllo mi pare funzioni
 
BFS
 

 INSERT INTO destinazione ( cf, datain, dataout )SELECT cf,
 datain, dataoutFROM sorgenteWHERE sorgente.dataout not in (select
 dataout from destinazione where 
sorgente.cf
=
destinazione.cf
 
 )
 
;da un primo controllo mi pare funzioniBFS
 
Credo, sempre abbia colto, manchi il criterio di
 DataOutNuova>DataOutPresente per il resto anche secondo me è
 corretta.


 
funziona!
 
grazie

Akery brought next idea :

Certo che funziona... funziona sempre, anche quando DataOut in
Sorgente è <= DataOut in Destinazione.
 
Beh io non avevo considerato l'eqguaglianza dei due CF (caso cui tu
non fai cenno), perciò avevo definito impossibile la query.
 
Se le condizioni sono DUE:
-  
T1.CF
 = 
T2.CF
 
-  T2.DataOut > T1.DateOut
allora la soluzione cambia in:
 
SELECT 
T2.CF
, T2.DataIn, T2.DataOut
FROM T1 INNER JOIN T2 ON 
T1.CF
 = 
T2.CF
 
WHERE (((T2.DataOut)>[T1].[DataOut]));
 
Se si aggiunge la TERZA condizione:
che un recordo che rispetti le DUE condizioni venga APPENded
una sola volta... chiedi al suonatore di cambiare la musica.
 
Bruno

 
Variante al problema:
 
se nel file di origine sono presenti 2 o più record uguali e nel file di 
destinazione non ancora è stato fatto il primo inserimento la query 
scrive tutti e più record uguali.
come fare per prenderne uno solo?
 
vale la pena fare una query aggregata che filtra e che poi alimenta 
quella di accodamento??
 
grazie
