Buongiorno!
Ho una tabella (collegata odbc) con un listino prezzi [TAB_PREZZI]. Ho necessità di estrarre tutti i listini variati in un determinato periodo e poi, per ciascun record di tale estrazione, aggiungere i valori del prezzo attuale, di quello precedente, eventualmente di quello successivo (che entrerà in vigore in una data successiva al periodo in analisi)
Non ho problemi concettuali a sviluppare le query, ma ad un certo punto ho la query riepilogativa che non è fruibile, impiega mezz'ora per essere eseguita.
Query che estrae i listini variati in un periodo ("010 elenco art forn"):
SELECT OFQFOR, OFQART
FROM TAB_PREZZI
WHERE (OFQDTI Between #6/1/2017# And #7/19/2017#)
GROUP BY OFQFOR, OFQART;
Impiega circa un secondo, anche meno
[dove OFQFOR, OFQART rispettivamente fornitore e articolo]
Query che estrae le date più recenti dei listini attivi ad oggi (query "020 01 list aperti"):
SELECT OFQFOR, OFQART, Max(OFQDT1) AS MaxDiOFQDT1
FROM TAB_PREZZI
WHERE (((OFQDT1)<=#7/19/2017#) AND ((OFQSTS)<>"4"))
GROUP BY OFQFOR, OFQART;
Questa query è solo propedeutica ad estrarre i valori dei prezzi attuali, con la query "020 02 list ultimi":
[dove OFQDT1 data inizio validità listino]
SELECT [020 01 list aperti].OFQFOR, [020 01 list aperti].OFQART, [020 01 list aperti].MaxDiOFQDT1, OFQVAL, OFQQUO
FROM [020 01 list aperti] INNER JOIN ASV1_OFQFI ON ([020 01 list aperti].MaxDiOFQDT1 = TAB_PREZZI.OFQDT1) AND ([020 01 list aperti].OFQART = TAB_PREZZI.OFQART) AND ([020 01 list aperti].OFQFOR = TAB_PREZZI.OFQFOR)
WHERE (((TAB_PREZZI.OFQSTS)<>"4"));
Anche qs query (basata sulla "020 01 list aperti") è veloce, meno di un secondo.
[dove OFQVAL, OFQQUO rispettivamente valuta e prezzo]
Il problema ce l'ho volendo collegare la prima query ""010 elenco art forn"" con quest'ultima...l'elaborazione diventa interminabile:
SELECT [010 elenco art forn].OFQFOR, [010 elenco art forn].OFQART, [020 02 list ultimi].MaxDiOFQDT1, [020 02 list ultimi].OFQVAL, [020 02 list ultimi].OFQQUO
FROM [010 elenco art forn] LEFT JOIN [020 02 list ultimi] ON ([010 elenco art forn].OFQART = [020 02 list ultimi].OFQART) AND ([010 elenco art forn].OFQFOR = [020 02 list ultimi].OFQFOR);
Non è la prima volta che faccio query del genere ma stavolta non riesco a risolvere