[Risolto] selezionare più date da una tabella

Discussioni sulle caratteristiche di database
Rispondi
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

[Risolto] selezionare più date da una tabella

Messaggio da strulga »

ciao a tutti.
vorrei creare una query da "IngredientiV" che selezioni
tutti quei record divisi per "Ingrediente" che abbiano la data più recente per ogni anno..
es. x Bellis Perennis fiori, dovrebbe selezionare:
Bellis perennis fiori RB6c 13/04/16
Bellis perennis fiori RB7b 04/04/17

e non
Bellis perennis fiori RB7a 30/03/17

e così via per tutti gli "Ingredienti"

ma non capisco come procedere.

potresete aiutarmi?
grazie
Allegati
strulgone_2017.odb
(242.07 KiB) Scaricato 146 volte
Ultima modifica di strulga il domenica 4 marzo 2018, 11:35, modificato 1 volta in totale.
LibreOffice 5.3.0.3 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: selezionare più date da una tabella

Messaggio da charlie »

Ciao, usando la funzione di aggregazione Max() sul campo Data e quella Gruppo() su gli altri campi, selezioni tutte e tre le voci Bellis perennis fiori, perché il loro Codice è diverso.
Se vuoi escluderne una devi aggiungere un criterio che la escluda che non sia la data, ma quale?
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggio da strulga »

Grazie della risposta.
con questo script:

SELECT "Ingrediente",
"Prezzo",
"Categoria",
MAX( "Data" ) AS "Data",
AS "ID" FROM "IngredientiV" GROUP BY "Ingrediente", "Prezzo", "Categoria"

ho già ottenuto un buon isultato.
ora mi mancherebbe di creare un nuovo ID ai record così otetnuti.
sono riuscito a sviluppare questo:

'I' + SUBSTRING ( "Categoria", 1, 1 ) + SUBSTRING ( "Data", 4, 1 ) AS "ID"

mi mancherebbe di aggiungere come ultima cifra all'ID dei numeri sequenziali, è possibile farlo? non capisco come, pensavo di usare rownumber ma non so che sintassi usare...
LibreOffice 5.3.0.3 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: selezionare più date da una tabella

Messaggio da charlie »

  1. Hai risolto escludendo il campo Codice dalla query.
    Ma quella sintassi è errata, la parte

    Codice: Seleziona tutto

    , 
    AS "ID" 
    è di troppo.
  2. Non credo sia quella la maniera di aggiungere un ID progressivo. Una volta me ne sono occupato, vediamo se riesco a trovare qualcosa ...
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggio da strulga »

si hai ragione, as id l'ho tralasciato quando copiavo il codice.
il codice giusto era così:

SELECT "Ingrediente",
"Prezzo",
"Categoria",
MAX( "Data" ) AS "Data"
FROM "IngredientiV" GROUP BY "Ingrediente", "Prezzo", "Categoria"
LibreOffice 5.3.0.3 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: selezionare più date da una tabella

Messaggio da charlie »

Ciao, vedi se ti puoi ispirare a questo esempio, ma si deve partire da un id numerato che non so se tu possa avere ...
Allegati
Progressivo.odb
(3.83 KiB) Scaricato 121 volte
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggio da strulga »

Quindi senza un ID numerato in precedenza non potrò associare una numerazione progressiva alle righe della mia tabella?
che fregatura!
ho provato ad aggiungere id numerato alle tabelle originarie (Tipo "Erbe, "Estratti" etc.) ma sql non me lo permette...
LibreOffice 5.3.0.3 su Windows 7
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggio da strulga »

Ce l'ho fatta con la tua query ad attribuire valore numerico! adesso provo a completare l'id!!!!!
LibreOffice 5.3.0.3 su Windows 7
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggio da strulga »

Niente. ho capito il problema, ma non ci esco vivo.
a me interessava selezionare solo l'ultimo record tra gli ingredienti inseriti (per esempio l'ultimo alcool) per recuperarne il valore relativo al prezzo.

ma mi sa che per come ho impostato questo db, forse non posso risolvere questa questione, non mi resta che continuare a scegliere gli ingredienti singoli nel formulario. mi sarebbe piaciuto poter selezionare solo il nome di un ingrediente e averne a disposizione le info sul prezzo, nome e categoria.

forse ho sbagliato ad impostare il db?
anzichè creare una tabella per ortofrutta, una per materie prime, una per erbe, una per imballaggi e poi riunire quelle che mi interessavano in ingredienti, avrei dovuto fare un megatabellone con tutto ordinato per id progressivo?
esiste un buon manuale per sql principianti? per capire come ragiona e come impostare le cose?
LibreOffice 5.3.0.3 su Windows 7
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggio da strulga »

Anzi... ce la sto facendo!
LibreOffice 5.3.0.3 su Windows 7
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggio da strulga »

c'è un modo affinchè count restituisca il valore 001 anzichè 1?
LibreOffice 5.3.0.3 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: selezionare più date da una tabella

Messaggio da charlie »

No, ma puoi fare concatenando:

Codice: Seleziona tutto

'00'||COUNT(...)
ma poi hai una stringa (testo), non un numero.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

[Risolto] Re: selezionare più date da una tabella

Messaggio da strulga »

Grazie Charlie ho risolto!
UNico escamotage:
per ogni categoria di ingrediente, i record devono avere data differente, affinchè la numerazione progressiva non si ripeta e non generi ID usguali.
ma per quel che mi serve è perfetto! grazie!
LibreOffice 5.3.0.3 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: selezionare più date da una tabella

Messaggio da charlie »

Ti spiace condividere con noi la soluzione?
P.S. Il tuo [Risolto] va inserito modificando il primo post, non l'ultimo.
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggio da strulga »

ciao, scusate il file era troppo grande e non lo prendeva, ora l'ho ridotto.

Innanzitutto ho creato la query VIngGroup, in cui ai record venivano associati numeri progressivi riferiti alle date

SELECT
"Ingrediente",
MAX( "Prezzo" ) AS "Prezzo",
"Categoria",
MAX( "Data" ) AS "Data",
( SELECT COUNT( * ) + 1
FROM "IngredientiV" "t2"
WHERE "t2"."Data" < "IngredientiV"."Data" ) AS "Count" FROM "IngredientiV"
GROUP BY "Ingrediente", "Categoria"
ORDER BY "Ingrediente" ASC

poi ho creato la query VIngID in cui creavo nuovi ID per i record. In questo caso gli ID non avevano un char di 4 caratteri fissi, perchè altrimenti mi uscivano doppioni:

SELECT
"Ingrediente" AS "Nome",
"Categoria",
"Prezzo",
"Data",
"Count",
SUBSTRING ("Categoria", 1, 1) + SUBSTRING ("Ingrediente", 1, 2) + SUBSTRING ("Ingrediente", -2, 1) + substring ("Data", 4,1) + substring ("Count", 1, 3 ) AS "Codice"
FROM "VIngGroup"
Order by "Codice" ASC

Poi ho usaato questa query come sorgente di nomi e ID degli ingredienti per i Formulari relativi alle tabelle base.

ho dovuto anche creare una corrispondenza tra vecchio e nuovo ID per quel che riguarda la tabella "Erbe"e "Ortofrutta" altrimenti nei calcoli degli "Estratti" non riuscivo ad attingere ad alcuni dati.

ho creato così una query chiamata "VErbeNome" In cui associavo l'"ID_Erba" con il "Nome"
SELECT "ID_Erbe", "Nome" + ' ' + "Categoria" AS "Nome"
FROM "Erbe"
union
SELECT "ID_Ortofrutta", "Nome"
FROM "Ortofrutta"

e poi una query in cui, grazie al campo "Nome" Associavo l'"ID_Erba" con il "Codice" degli ingredienti creato nella query "VIngID"

SELECT
"VErbeNome".*,
"Ing"."Codice" AS "Codice"
FROM "VErbeNome"
LEFT OUTER JOIN "VIngID" AS "Ing" ON "VErbeNome"."Nome" = "Ing"."Nome"

E così sono riuscito a risolvere la faccenda, sostituendo a tutte le query al posto della query "IngredientiV" la nuova query "VIngID".

Con questo escamotage ho risolto col vincolo di inserire date diverse per ogni categoria di ingrediente, altrimenti corro il rischio di creare nuovi ID doppi.

Grazie mille charlie dell'aiuto.
Allegati
strulgTemp - Copia (2) - Copia.odb
(196.48 KiB) Scaricato 89 volte
LibreOffice 5.3.0.3 su Windows 7
Rispondi