Pannello di Controllo Moderatore ]

[Risolto] selezionare più date da una tabella

Discussioni sulle caratteristiche di database

[Risolto] selezionare più date da una tabella

Messaggioda strulga » martedì 27 febbraio 2018, 15:25

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 10 volte
Ultima modifica di strulga il domenica 4 marzo 2018, 12:35, modificato 1 volta in totale.
LibreOffice 5.3.0.3 su Windows 7
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggioda charlie » mercoledì 28 febbraio 2018, 9:52

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 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5089
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: selezionare più date da una tabella

Messaggioda strulga » mercoledì 28 febbraio 2018, 10:53

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
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggioda charlie » mercoledì 28 febbraio 2018, 11:23

  1. Hai risolto escludendo il campo Codice dalla query.
    Ma quella sintassi è errata, la parte
    Codice: Seleziona tutto   Espandi visualeStringi visuale
    ,
    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 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5089
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: selezionare più date da una tabella

Messaggioda strulga » mercoledì 28 febbraio 2018, 11:41

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
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggioda charlie » mercoledì 28 febbraio 2018, 12:34

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 10 volte
charlie
macOS 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5089
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: selezionare più date da una tabella

Messaggioda strulga » mercoledì 28 febbraio 2018, 17:19

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: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggioda strulga » mercoledì 28 febbraio 2018, 17:24

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: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggioda strulga » mercoledì 28 febbraio 2018, 17:48

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: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggioda strulga » mercoledì 28 febbraio 2018, 17:51

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

Re: selezionare più date da una tabella

Messaggioda strulga » mercoledì 28 febbraio 2018, 18:45

c'è un modo affinchè count restituisca il valore 001 anzichè 1?
LibreOffice 5.3.0.3 su Windows 7
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggioda charlie » mercoledì 28 febbraio 2018, 18:57

No, ma puoi fare concatenando:
Codice: Seleziona tutto   Espandi visualeStringi visuale
'00'||COUNT(...)

ma poi hai una stringa (testo), non un numero.
charlie
macOS 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5089
Iscritto il: mercoledì 19 dicembre 2012, 11:50

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

Messaggioda strulga » sabato 3 marzo 2018, 11:47

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
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: selezionare più date da una tabella

Messaggioda charlie » sabato 3 marzo 2018, 12:50

Ti spiace condividere con noi la soluzione?
P.S. Il tuo [Risolto] va inserito modificando il primo post, non l'ultimo.
charlie
macOS 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5089
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: selezionare più date da una tabella

Messaggioda strulga » domenica 4 marzo 2018, 12:34

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 11 volte
LibreOffice 5.3.0.3 su Windows 7
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53


Torna a Base

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti