Aiuto query

iw8ffg

Nuovo Utente
3 Apr 2016
11
0
1
Ciao a tutti, ho bisogno di un aiuto; ho un database mysql che utlizzo per registrare le donazioni sangue della mia associazione formato da una tabella adibita alla registrazione anagrafica del donatore ed un altra tabella dove vengono registrate le singole donazioni che effettua il donatore.

Avrei necessità di creare una query che mi estrae quali sono i donatori (registrati nella prima tabella) che negli ultimi 6 mesi non hanno effettuato alcuna donazione o che l'ultima donazione inserita risale a piu di 6 mesi dalla data corrente.

non so sè sono riuscito a farmi comprendere e grazie mille a chiunque riesce ad aiutarmi.

Se può essere d'aiuto questa e la struttura delle tabelle:

Tabella anagrafica

FIELD TYPE
------------- -----------
id INT(20)
cognome VARCHAR(50)
nome VARCHAR(50)
sesso VARCHAR(50)
luogo_nascita VARCHAR(50)
prov_nascita VARCHAR(50)
data_nascita DATE
indirizzo_res VARCHAR(50)
citta_res VARCHAR(50)
cap_res VARCHAR(50)
provincia_res VARCHAR(50)
e-mail VARCHAR(50)
telefono VARCHAR(50)
cellulare VARCHAR(50)
indirizzo_dom VARCHAR(50)
citta_dom VARCHAR(50)
cap_dom VARCHAR(50)
provincia_dom VARCHAR(50)
luogo_lavoro VARCHAR(50)
tel_lav VARCHAR(50)
tel_dir VARCHAR(50)
preferenza VARCHAR(50)
tipo_prelievo VARCHAR(50)
iscrizione VARCHAR(50)
adesione VARCHAR(50)
DATA DATE
comitato VARCHAR(50)
id_comitato INT(10)

Tabella donazioni
FIELD TYPE
----------- -----------
id INT(5)
DATA DATE
cognome VARCHAR(50)
nome VARCHAR(50)
comitato VARCHAR(50)
tipo VARCHAR(50)
scheda VARCHAR(50)
id_donatore VARCHAR(50)
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
definendo "@dVerifica" la data di separazione tra i "ritardatari" ed i "recenti",
potrebbe andare bene una query del tipo,
SQL:
select * from (
select
  max(d.DATA) as DATA
, d.id_donatore
, a.cognome
, a.nome
, a.sesso
, a.cellulare
from donazioni d
left join anagrafica a
on d.id_donatore = a.id
group by
  d.id_donatore
, a.cognome
, a.nome
, a.sesso
, a.cellulare
) x
where x.DATA < @dVerifica

ho scritto gli elementi separati per renderla più comprensibile possibile

come vedi d "semplifica" le donazioni e "a" semplifica l'anagrafica

aggiungi liberamente altri campi dell'anagrafica allo stesso modo come già li leggi
attento ad aggiungere campi delle donazioni, perché i valori contenuti devono essere univoci
se non lo fossero otterresti righe multiple per lo stesso soggetto ( a prescindere dalla query )

questo l'esempio con relativo risultato
1576886252611.png
 
  • Like
Reactions: iw8ffg

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
con questa query ottieni la lista delle persone in anagrafica, mai presenti in donazioni
SQL:
select 
  a.cognome
, a.nome
, a.sesso
, a.cellulare
from @anagrafica a
left join @donazioni d
on a.id = d.id_donatore
where d.id_donatore is null
 

iw8ffg

Nuovo Utente
3 Apr 2016
11
0
1
Grazie mille marino51, hai centrato a pieno quello che cercavo; ho fatto delle modifiche che mi portano dei risultati che ti inserisco in seguito; che ne pensi?

Codice:
SELECT * FROM (
SELECT
  MAX(d.DATA) AS DATA
, d.id_donatore
, a.cognome
, a.nome
, a.sesso
, a.cellulare
, a.`e-mail`
FROM donazioni d
LEFT JOIN anagrafica a
ON d.id_donatore = a.id
GROUP BY
  d.id_donatore
, a.cognome
, a.nome
, a.sesso
, a.cellulare
, a.`e-mail`
) X
WHERE (
CASE WHEN sesso = 'F' THEN X.DATA < DATE(CURRENT_DATE - INTERVAL 6 MONTH)
     WHEN sesso = 'M' THEN X.DATA < DATE(CURRENT_DATE - INTERVAL 3 MONTH) END);

Grazie


definendo "@dVerifica" la data di separazione tra i "ritardatari" ed i "recenti",
potrebbe andare bene una query del tipo,
SQL:
select * from (
select
  max(d.DATA) as DATA
, d.id_donatore
, a.cognome
, a.nome
, a.sesso
, a.cellulare
from donazioni d
left join anagrafica a
on d.id_donatore = a.id
group by
  d.id_donatore
, a.cognome
, a.nome
, a.sesso
, a.cellulare
) x
where x.DATA < @dVerifica

ho scritto gli elementi separati per renderla più comprensibile possibile

come vedi d "semplifica" le donazioni e "a" semplifica l'anagrafica

aggiungi liberamente altri campi dell'anagrafica allo stesso modo come già li leggi
attento ad aggiungere campi delle donazioni, perché i valori contenuti devono essere univoci
se non lo fossero otterresti righe multiple per lo stesso soggetto ( a prescindere dalla query )

questo l'esempio con relativo risultato
Vedi l'allegato 6832
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
eviterei la "CASE" nella clausola "where" con un più consono
SQL:
WHERE ( X.sesso = 'F' AND X.DATA < DATE(CURRENT_DATE - INTERVAL 6 MONTH) )
   OR ( X.sesso = 'M' AND X.DATA < DATE(CURRENT_DATE - INTERVAL 3 MONTH) );
attento alle parentesi ( … ) OR ( ... )
 
  • Like
Reactions: iw8ffg

iw8ffg

Nuovo Utente
3 Apr 2016
11
0
1
una info, che programmi è quello che hai messo lo screen del risultato della query?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
una info, che programmi è quello che hai messo lo screen del risultato della query

la query é stata provata con
1578409000609.png
un tool presente in tutte le installazioni database di Microsoft

l'immagine é stata postata con un copia incolla dallo
1578409109301.png
strumento da sempre presente in windows,
win 10 propone una nuova versione, ma sono rimasto sulla vecchia perché sufficiente.
 
Discussioni simili
Autore Titolo Forum Risposte Data
E Aiuto per query PHP 8
R Aiuto con le query MS Access 2
D aiuto con query PHP 1
A [risolto] aiuto integrazione query per db calcistico MySQL 2
S aiuto con le query PHP 0
S aiuto con query MySQL 10
P Aiuto con query "SELECT" PHP 6
J Aiuto per una query di eliminazione PHP 5
A Aiuto con Funzione/Query PHP 3
B Aiuto query mysql in php PHP 1
F aiuto per query UNIONE mysql MySQL 2
I Aiuto su query PHP 1
D Aiuto Query difficile MySQL 3
D aiuto query mysql MySQL 2
C AIUTO Query Database MySql PHP 5
I Aiuto query PHP 2
R Aiuto query mysql PHP 14
E Aiuto per query PHP 8
X eseguire due query aiuto PHP 1
D Aiuto Query PHP 5
T Aiuto sub query Database 0
S aiuto x query... PHP 0
A Aiuto, query per Access 2003 MS Access 5
S aiuto in query di aggiornamento Database 0
R Aiuto. come modificare il contenuto di una query a campi incrociati Database 0
R Aiuto ripristino sito web Presentati al Forum 0
L Aiuto con DataGridView Visual Basic 1
F Aiuto! cambio immagine di sfondo al cambio pagina HTML e CSS 2
I aiuto urgente per thunderbird Posta Elettronica 0
I aiuto per outlook Posta Elettronica 0
D aiuto funzioni javascript Javascript 1
T aiuto per trasformare un quiz fatto in JS in un quiz in JQUERY jQuery 0
D Aiuto CSS in ELEMENTOR - Cambiare un testo CMS (Content Management System) 0
M Fullcalendar in Codeigniter, un aiuto per la chiamata $ajax ? jQuery 0
K Aiuto con file audio in html HTML e CSS 1
G Script notifiche dekstop aiuto Javascript 0
P Aiuto per rendere un Bot Telegram Privato PHP 1
M Un aiuto da chi ha apple Mac e Software 0
P Richiesta di aiuto Presentati al Forum 1
A Aiuto per pagina php PHP 0
M Questa pagina non carica correttamente Google Maps: aiuto!! HTML e CSS 1
I Aiuto php Dependent Lookup PHP 0
M AIUTO ESERCIZIO JAVA Javascript 1
G Aiuto con htaccess e rewriterule PHP 0
T cercasi aiuto per file d1 (open-edge db) Database 0
M Aiuto con inserimento immagini WordPress 6
D aiuto schermata photoshop Photoshop 0
L Aiuto per programma web php/mySQL PHP 2
A Aiuto php colore diverso PHP 10
L Aiuto creazione menu mancante WordPress 0

Discussioni simili