FORUM PER UTENTI MILLEWIN
Attenzione !
Per intervenire sul forum è necessario essere registrati e connessi.

L'Amministratore

****************************************************
“Se tu hai una mela ed io ho una mela, e ce la scambiamo, alla fine tu ed io avremo sempre una mela ciascuno.
Ma se tu hai un’idea ed io ho un’idea, e ce la scambiamo, allora avremo entrambi due idee”.

George Bernard Shaw
****************************************************

query veramente complessa

Andare in basso

query veramente complessa

Messaggio  nanci giacinto il Sab 4 Mar 2017 - 22:56

Salve siamo otto medici collegati in rete (Associazione MEDIASS)  geografica con RRS server dovremmo fare una ricerca per l'Università della Calabria Istituto di Igiene per alcune patologie (sinusite, bronchite) e ci chiedono i seguenti dati: ICD9, nome, cognome, eta, sesso, data visita, diagnosi, data diagnosi, esami colturali, risultato, antibiogramma, molecola prescritta, durata terapia, posologia, eventuale modifica terapia antibiotica, motivazione cambio terapia, nuova terapia, posologia, durata, eventuali comorbilità esito malattia (v.specialistica, ricovero guarigione). Come si vede credo che in una query tutto non ci può stare e qualche dato richiesto non si può estrarre. Avevo delle query utilizzabili ma in sysbase e con postgres non funzionano. Chiedo ai maghi delle query un aiuto per quello che umanamente si può fare. grazie.
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2857
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Cervino il Sab 11 Mar 2017 - 10:44

nanci giacinto ha scritto:Salve siamo otto medici collegati in rete (Associazione MEDIASS)  geografica con RRS server dovremmo fare una ricerca per l'Università della Calabria Istituto di Igiene per alcune patologie (sinusite, bronchite) e ci chiedono i seguenti dati: ICD9, nome, cognome, eta, sesso, data visita, diagnosi, data diagnosi, esami colturali, risultato, antibiogramma, molecola prescritta, durata terapia, posologia, eventuale modifica terapia antibiotica, motivazione cambio terapia, nuova terapia, posologia, durata, eventuali comorbilità esito malattia (v.specialistica, ricovero guarigione). Come si vede credo che in una query tutto non ci può stare e qualche dato richiesto non si può estrarre. Avevo delle query utilizzabili ma in sysbase e con postgres non funzionano. Chiedo ai maghi delle query un aiuto per quello che umanamente si può fare. grazie.

posso solo suggerire una query approssimativa e presuntiva x estrarre le righe compilate relative ad uno specifico problema ( ovviamente in Modalità Problema Obbligatoria ) in un determinato periodo ;  il format della query non ottimale ma funzionante in PgAdmin e MU direttamente con Copia e Incolla , spero ):


WITH mmg AS ( SELECT userid , nome FROM v_utenti WHERE codice_regionale ILike '%' ) ,
evento AS ( SELECT codice , addenda As pbl , cp_code As pbl_code , pb_code , data_open As pbl_onset FROM cart_problemi WHERE userid IN ( Select userid From mmg ) AND ( addenda ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' ) AND data_open > Today()-365 ) ,
paz_ssr AS ( SELECT p.codice , p.cognome , p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( p.sesso As Char(1)) FROM pazienti p LEFT Outer JOIN nos_002 n On p.codice = n.codice WHERE p.codice IN ( Select codice From evento ) And p.pa_convenzione = 'S' And ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null ) ,
terapia AS ( SELECT codice , data_open As terap_d , co_des As drug , te_npezzi As n_pezzi , po_des As posologia , co_atc As atc , ur_pb_id FROM cart_terap WHERE /* codice IN ( Select codice From paz_ssr) AND */ pb_code IN ( Select pb_code From evento ) AND data_open > Today()-365 ) ,
accert AS ( SELECT a.codice , a.data_open As acc_d , a.ac_des As acc_tipo , a.ac_val As acc_v , ac_tipo FROM cart_accert a WHERE /* a.codice IN ( Select codice From evento ) AND */ pb_code IN ( Select pb_code From evento ) AND ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open > Today()-365 ) ,
diario AS ( SELECT codice , data_open As diario_d , de_descr As diario FROM cart_descriz WHERE /* codice IN ( Select codice From evento ) AND */ pb_code IN ( Select pb_code From evento ) AND data_open > Today()-365 )
SELECT cognome , nome , nascita , sesso , eta , pbl_onset As ev_d , pbl As descriz , pbl_code As icd9_referto , '' As posologia , '' As act , Cast( '1' AS SmallInt) As n_ord
FROM paz_ssr p LEFT JOIN evento l ON p.codice = l.codice WHERE pbl_onset IS NOT Null
UNION
SELECT cognome , nome , nascita , sesso , eta , terap_d , drug , n_pezzi , posologia , atc , '2'
FROM paz_ssr p LEFT JOIN terapia t ON p.codice = t.codice WHERE terap_d IS NOT Null
UNION
SELECT cognome , nome , nascita , sesso , eta , acc_d , acc_tipo , acc_v , ac_tipo , '' , '3'
FROM paz_ssr p LEFT JOIN accert a ON p.codice = a.codice WHERE acc_d IS NOT Null
UNION
SELECT cognome , nome , nascita , sesso , eta , diario_d , diario , '' , '' , '' , '4'
FROM paz_ssr p LEFT JOIN diario d ON p.codice = d.codice WHERE diario_d IS NOT Null
ORDER BY 1 , 2 , 11
LIMIT 150 OFFSET 0



Adattare le Clausole ( specie quelle in WITH che selezionano le viste CTE ) alle proprie esigenze e/o necessità ; non ho suggerimenti migliori al riguardo .  Ti saluto ,  Sergio   ,  Orzivecchi  BS

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2901
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo dell'utente

Torna in alto Andare in basso

query veramente complessa

Messaggio  nanci giacinto il Sab 11 Mar 2017 - 16:51

Grazie per la pazienza per elaborare una query complicata. Purtroppo mi da risultato zero. non conosco la clausola WHIT prima di select e non so come adattarla. Forse si potrebbe fare per singola patologia perchè così essendo più semplice non si dovrebbe bloccare. Grazie ancora per la pazienza.
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2857
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Cervino il Sab 11 Mar 2017 - 20:03

se anche le 3 semplici query poi assemblate nella query finale  :

SELECT userid , nome FROM v_utenti WHERE nome ILike '%'

SELECT codice , addenda As pbl , cp_code As pbl_code , pb_code , data_open As pbl_onset , userid FROM cart_problemi WHERE userid IN ( SELECT userid FROM v_utenti WHERE nome ILike '%' ) AND ( addenda ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' ) AND data_open > Today()-365

SELECT p.codice , p.cognome , p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( p.sesso As Char(1)) FROM pazienti p LEFT Outer JOIN nos_002 n On p.codice = n.codice WHERE n.pa_medi IN ( SELECT userid FROM v_utenti WHERE nome ILike '%' ) And p.pa_convenzione = 'S' And ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null

restituiscono 0 righe , Non ho idea di come si possa procedere ( sul mio MillePs sono efficienti e velocissime sia in MU che pgAdmin


Ultima modifica di Cervino il Sab 11 Mar 2017 - 23:41, modificato 1 volta

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2901
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo dell'utente

Torna in alto Andare in basso

QUERY VERAMENTE COMPLESSA

Messaggio  nanci giacinto il Sab 11 Mar 2017 - 23:13

sALVE GRAZIE PER LA PAZIENZA MA DA SEMPRE ZERO COME RISULTATO COMUNQUE LA COMPONGO. E' POSSIBILE ADATTARE LA QUERY PER POSTAZIONE SINGOLA PERCHE' FAREI LE ESTRAZIONI PER OGNI SINGOLO MEDICO IN QUANTO LAVORIAMO CON RRS SERVER. GRAZIE
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2857
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Cervino il Sab 11 Mar 2017 - 23:44

nanci giacinto ha scritto:sALVE GRAZIE PER LA PAZIENZA MA DA SEMPRE ZERO COME RISULTATO COMUNQUE LA COMPONGO. E' POSSIBILE ADATTARE LA QUERY PER POSTAZIONE SINGOLA PERCHE' FAREI LE ESTRAZIONI PER OGNI SINGOLO MEDICO IN QUANTO LAVORIAMO CON RRS SERVER. GRAZIE
purtroppo per errore ho cancellato il post precedente; è piu' difficile scrivere sul Forum che testare le query .

se anche le 3 semplici query , poi assemblate nella query finale  :

SELECT userid , nome FROM v_utenti WHERE nome ILike '%'

SELECT codice , addenda As pbl , cp_code As pbl_code , pb_code , data_open As pbl_onset , userid FROM cart_problemi WHERE userid IN ( SELECT userid FROM v_utenti WHERE nome ILike '%' ) AND ( addenda ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' ) AND data_open > Today()-365

SELECT p.codice , p.cognome , p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( p.sesso As Char(1)) FROM pazienti p LEFT Outer JOIN nos_002 n On p.codice = n.codice WHERE n.pa_medi IN ( SELECT userid FROM v_utenti WHERE nome ILike '%' ) And p.pa_convenzione = 'S' And ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null

restituiscono 0 righe , Non ho idea di come si possa procedere ( sul mio MillePs sono efficienti e velocissime sia in MU che pgAdmin

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2901
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo dell'utente

Torna in alto Andare in basso

query veramente complessa

Messaggio  nanci giacinto il Dom 12 Mar 2017 - 0:10

GRAZIE PER LA PAZIENZA. IO AVREI FATTO QUESTE DUE QUERY UNA ESTRAE LA PATOLOGIA E LE RELATIVE TERAPIE E L'ALTRA LA PATOLOGIA + LE VISITE SPECIALISTICHE E GLI ACCERTEMENTI. DA SOLE FUNZIONANO BENE E' POSSIBILE METTERLE INSIEME E FARNE UNA SOLA?

Patologia + terapie
SELECT  t.cognome, t.nome, t.sesso, (year(today())-year(t.datanasc)) AS eta, t.datavisita, t.terapia, t.atc, pro.dataopen, pro.icd9, pro.problema
FROM V_TERAPIE t inner join v_problemi_attivi pro on t.codice = pro.codice and t.icd9= pro.icd9
where t.icd9 = '461.9%%' or t.problema ilike '%%sinusite%%'
 
Patologia + esami e visiste specialistiche
SELECT  a.cognome, a.nome, a.sesso, (year(today())-year(a.datanasc)) AS eta, a.datavisita, a.accertamento, a.icd9, pro.dataopen, pro.icd9, pro.problema
FROM V_ACCERTAMENTI a inner join v_problemi_attivi pro on a.codice = pro.codice and a.icd9= pro.icd9

where a.icd9 = '461.9%%' or a.problema ilike '%%sinusite%%'
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2857
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Cervino il Dom 12 Mar 2017 - 21:31

nanci giacinto ha scritto:GRAZIE PER LA PAZIENZA. IO AVREI FATTO QUESTE DUE QUERY UNA ESTRAE LA PATOLOGIA E LE RELATIVE TERAPIE E L'ALTRA LA PATOLOGIA + LE VISITE SPECIALISTICHE E GLI ACCERTEMENTI. DA SOLE FUNZIONANO BENE E' POSSIBILE METTERLE INSIEME E FARNE UNA SOLA?

Patologia + terapie
SELECT  t.cognome, t.nome, t.sesso, (year(today())-year(t.datanasc)) AS eta, t.datavisita, t.terapia, t.atc, pro.dataopen, pro.icd9, pro.problema
FROM V_TERAPIE t inner join v_problemi_attivi pro on t.codice = pro.codice and t.icd9= pro.icd9
where t.icd9 = '461.9%%' or t.problema ilike '%%sinusite%%'
 
Patologia + esami e visiste specialistiche
SELECT  a.cognome, a.nome, a.sesso, (year(today())-year(a.datanasc)) AS eta, a.datavisita, a.accertamento, a.icd9, pro.dataopen, pro.icd9, pro.problema
FROM V_ACCERTAMENTI a inner join v_problemi_attivi pro on a.codice = pro.codice and a.icd9= pro.icd9

where a.icd9 = '461.9%%' or a.problema ilike '%%sinusite%%'
Purtroppo alcune Viste non sono presenti in PgAdmin , in MU le 2 query vengono eseguite in tempi biblici e restituiscono 0 righe .

PS : sarebbe opportuno rimuovere il doppio simbolo '%%'  .        Saluti ,  Sergio

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2901
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Cervino il Mar 14 Mar 2017 - 23:52

nanci giacinto ha scritto:GRAZIE PER LA PAZIENZA. IO AVREI FATTO QUESTE DUE QUERY UNA ESTRAE LA PATOLOGIA E LE RELATIVE TERAPIE E L'ALTRA LA PATOLOGIA + LE VISITE SPECIALISTICHE E GLI ACCERTEMENTI. DA SOLE FUNZIONANO BENE E' POSSIBILE METTERLE INSIEME E FARNE UNA SOLA?

Patologia + terapie
SELECT  t.cognome, t.nome, t.sesso, (year(today())-year(t.datanasc)) AS eta, t.datavisita, t.terapia, t.atc, pro.dataopen, pro.icd9, pro.problema
FROM V_TERAPIE t inner join v_problemi_attivi pro on t.codice = pro.codice and t.icd9= pro.icd9
where t.icd9 = '461.9%%' or t.problema ilike '%%sinusite%%'
 
Patologia + esami e visiste specialistiche
SELECT  a.cognome, a.nome, a.sesso, (year(today())-year(a.datanasc)) AS eta, a.datavisita, a.accertamento, a.icd9, pro.dataopen, pro.icd9, pro.problema
FROM V_ACCERTAMENTI a inner join v_problemi_attivi pro on a.codice = pro.codice and a.icd9= pro.icd9

where a.icd9 = '461.9%%' or a.problema ilike '%%sinusite%%'
Ho provato a riscrivere la query con il vecchio sistema ( senza WITH  &  CTE ) lavoro tedioso e monotono ;


SELECT p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , l.data_open As ev_d , pr_descr As descriz , cp_code As icd9_referto , '' As posologia , '' As act , Cast( '1' AS SmallInt) As n_ord
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice )
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%' ) AND l.data_open > Today()-365 ) AND l.data_open IS NOT Null
UNION
SELECT p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , t.data_open , t.co_des , t.te_npezzi , t.po_des , t.co_atc , '2'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_terap t ON p.codice = t.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%' ) AND l.data_open > Today()-365 )
AND l.pb_code = t.pb_code AND t.data_open IS NOT Null
UNION
SELECT p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , a.data_open , a.ac_des , a.ac_val , a.ac_tipo , '' , '3'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_accert a ON p.codice = a.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%' ) AND l.data_open > Today()-365 )
AND l.pb_code = a.pb_code AND a.ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open IS NOT Null
UNION
SELECT p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , d.data_open , d.de_descr , '' , '' , '' , '4'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_descriz d ON p.codice = d.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%' ) AND l.data_open > Today()-365 )
AND l.pb_code = d.pb_code AND d.data_open IS NOT Null
ORDER BY 1 , 2 , 11
LIMIT 150 OFFSET 0



Sul mio MillePS monoUtente restituiscono lo stesso numero di righe ma uniformare le clausole nelle 2 query con impostazione logica differente, non è facile : spero Ti possa essere utile , almeno in parte .     Sergio

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2901
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  mario shirt il Mer 15 Mar 2017 - 16:27

Cervino ha scritto:
nanci giacinto ha scritto:GRAZIE PER LA PAZIENZA. IO AVREI FATTO QUESTE DUE QUERY UNA ESTRAE LA PATOLOGIA E LE RELATIVE TERAPIE E L'ALTRA LA PATOLOGIA + LE VISITE SPECIALISTICHE E GLI ACCERTEMENTI. DA SOLE FUNZIONANO BENE E' POSSIBILE METTERLE INSIEME E FARNE UNA SOLA?

Patologia + terapie
SELECT  t.cognome, t.nome, t.sesso, (year(today())-year(t.datanasc)) AS eta, t.datavisita, t.terapia, t.atc, pro.dataopen, pro.icd9, pro.problema
FROM V_TERAPIE t inner join v_problemi_attivi pro on t.codice = pro.codice and t.icd9= pro.icd9
where t.icd9 = '461.9%%' or t.problema ilike '%%sinusite%%'
 
Patologia + esami e visiste specialistiche
SELECT  a.cognome, a.nome, a.sesso, (year(today())-year(a.datanasc)) AS eta, a.datavisita, a.accertamento, a.icd9, pro.dataopen, pro.icd9, pro.problema
FROM V_ACCERTAMENTI a inner join v_problemi_attivi pro on a.codice = pro.codice and a.icd9= pro.icd9

where a.icd9 = '461.9%%' or a.problema ilike '%%sinusite%%'
Ho provato a riscrivere la query con il vecchio sistema ( senza WITH  &  CTE ) lavoro tedioso e monotono ;


SELECT p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , l.data_open As ev_d , pr_descr As descriz , cp_code As icd9_referto , '' As posologia , '' As act , Cast( '1' AS SmallInt) As n_ord
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice )
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%' ) AND l.data_open > Today()-365 ) AND l.data_open IS NOT Null
UNION
SELECT p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , t.data_open , t.co_des , t.te_npezzi , t.po_des , t.co_atc , '2'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_terap t ON p.codice = t.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%' ) AND l.data_open > Today()-365 )
AND l.pb_code = t.pb_code AND t.data_open IS NOT Null
UNION
SELECT p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , a.data_open , a.ac_des , a.ac_val , a.ac_tipo , '' , '3'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_accert a ON p.codice = a.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%' ) AND l.data_open > Today()-365 )
AND l.pb_code = a.pb_code AND a.ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open IS NOT Null
UNION
SELECT p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , d.data_open , d.de_descr , '' , '' , '' , '4'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_descriz d ON p.codice = d.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%' ) AND l.data_open > Today()-365 )
AND l.pb_code = d.pb_code AND d.data_open IS NOT Null
ORDER BY 1 , 2 , 11
LIMIT 150 OFFSET 0



Sul mio MillePS monoUtente restituiscono lo stesso numero di righe ma uniformare le clausole nelle 2 query con impostazione logica differente, non è facile : spero Ti possa essere utile , almeno in parte .     Sergio
 Sergio ho adattato questa query al mio progetto Dono, estrae gli accertamenti eccetto la scheda pain (che come ti avevo detto nel mio post con la query di Giacinto adattata:
 SELECT  a.cognome, a.nome, a.sesso, (year(today())-year(a.datanasc)) AS eta, a.datavisita, a.accertamento, a.icd9, pro.dataopen, pro.icd9, pro.problema
FROM V_ACCERTAMENTI a inner join v_problemi_attivi pro on a.codice = pro.codice and a.icd9= pro.icd9

where  a.problema ilike '%dono%'
qualcosa fa vedere)
la terapia non va, fa casino con posologia..
Mario
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3029
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 62

Visualizza il profilo dell'utente

Torna in alto Andare in basso

query veramente complessa

Messaggio  nanci giacinto il Gio 16 Mar 2017 - 22:46

grazie per l'impegno ma da sempre e inesorabilmente zero come risultato
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2857
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo dell'utente

Torna in alto Andare in basso

query veramente complessa

Messaggio  nanci giacinto il Gio 16 Mar 2017 - 22:48

Grazie per l'impegno ma da sempre e inesorabilmente zero come risultato
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2857
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Cervino il Ven 17 Mar 2017 - 13:12

nanci giacinto ha scritto:Grazie per l'impegno ma da sempre e inesorabilmente zero come risultato
Non saprei dare una spiegazione logica visto che al collega Mario funziona ;  comunque quando una query complessa non funziona basta ridurla progressivamente ai minimi termini per superare l' ostacolo :


SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , l.data_open As ev_d , pr_descr ||' , '|| Addenda As descriz , cp_code As icd9_referto , '' As posologia , '' As act , Cast( '1' AS SmallInt) As n_ord
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice )
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%') AND l.data_open Between '2016-01-01' And '2017-03-31' ) AND l.data_open IS NOT Null
/* UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , t.data_open , t.co_des , t.te_npezzi , t.po_des , t.co_atc , '2'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_terap t ON p.codice = t.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%') AND l.data_open Between '2016-01-01' And '2017-03-31' AND t.data_open Between '2016-01-01' And '2017-03-31')
AND l.pb_code = t.pb_code AND t.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , a.data_open , a.ac_des , a.ac_val , a.ac_tipo , '' , '3'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_accert a ON p.codice = a.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%') AND l.data_open Between '2016-01-01' And '2017-03-31' AND a.data_open Between '2016-01-01' And '2017-03-31')
AND l.pb_code = a.pb_code AND a.ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , d.data_open , d.de_descr , '' , '' , '' , '4'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_descriz d ON p.codice = d.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%') AND l.data_open Between '2016-01-01' And '2017-03-31' AND d.data_open Between '2016-01-01' And '2017-03-31')
AND l.pb_code = d.pb_code AND d.data_open IS NOT Null */
ORDER BY 1 , 2 , 11 , 7
LIMIT 150 OFFSET 0



se il problema persiste , prova con :

SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta
FROM (( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
WHERE u.nome ILIKE '%'  AND  u.codice_regionale ILIKE '%'  AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null



inserendo  anche ev.  nome utente o codice regionale di un singolo MMG

Se anche cosi , non dovesse restituire nessuna riga, abbiamo MillePS con schemi diversi ; se invece dovesse funzionare aggiungere progressivamente una' altra query   ( sostando /* dal primo -->  davanti al secondo UNION

Sergio

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2901
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  mario shirt il Ven 17 Mar 2017 - 16:31

Cervino ha scritto:
nanci giacinto ha scritto:Grazie per l'impegno ma da sempre e inesorabilmente zero come risultato
Non saprei dare una spiegazione logica visto che al collega Mario funziona ;  comunque quando una query complessa non funziona basta ridurla progressivamente ai minimi termini per superare l' ostacolo :


SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , l.data_open As ev_d , pr_descr ||' , '|| Addenda As descriz , cp_code As icd9_referto , '' As posologia , '' As act , Cast( '1' AS SmallInt) As n_ord
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice )
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%') AND l.data_open Between '2016-01-01' And '2017-03-31' ) AND l.data_open IS NOT Null
/* UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , t.data_open , t.co_des , t.te_npezzi , t.po_des , t.co_atc , '2'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_terap t ON p.codice = t.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%') AND l.data_open Between '2016-01-01' And '2017-03-31' AND t.data_open Between '2016-01-01' And '2017-03-31')
AND l.pb_code = t.pb_code AND t.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , a.data_open , a.ac_des , a.ac_val , a.ac_tipo , '' , '3'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_accert a ON p.codice = a.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%') AND l.data_open Between '2016-01-01' And '2017-03-31' AND a.data_open Between '2016-01-01' And '2017-03-31')
AND l.pb_code = a.pb_code AND a.ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , d.data_open , d.de_descr , '' , '' , '' , '4'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_descriz d ON p.codice = d.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( l.addenda ILIKE '%Sinusite%' OR l.addenda ILIKE '%Bronchite%') AND l.data_open Between '2016-01-01' And '2017-03-31' AND d.data_open Between '2016-01-01' And '2017-03-31')
AND l.pb_code = d.pb_code AND d.data_open IS NOT Null */
ORDER BY 1 , 2 , 11 , 7
LIMIT 150 OFFSET 0



se il problema persiste , prova con :

SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta
FROM (( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
WHERE u.nome ILIKE '%'  AND  u.codice_regionale ILIKE '%'  AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null



inserendo  anche ev.  nome utente o codice regionale di un singolo MMG

Se anche cosi , non dovesse restituire nessuna riga, abbiamo MillePS con schemi diversi ; se invece dovesse funzionare aggiungere progressivamente una' altra query   ( sostando /* dal primo -->  davanti al secondo UNION

Sergio
Per completeezza, la prima query  da 0 anche a me, la seconda mi estrae tutti i paz del mio database (miei e dell'associato) se metto mio nome al posto di u_nome e mio codice regionale dopo mi da 0.
Forse non ho il problema sinusite o bronchite xche' se metto dono al posto di sinusite sulla prima query mi va..
Mario
P.S. scoperto l'arcano... I problemi sinusite e bronchite sono stati inseriti prima delle date immesse. Ho provato a variare l'inizio della ricerca ed anche a me estrae i p. con il problema bronchite. Se metto dono al posto di bronchite mi andava xce' i problemi con "dono" erano inseriti in quellìarco di tempo.
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3029
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 62

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Cervino il Sab 18 Mar 2017 - 7:53

mario shirt ha scritto:
...  se il problema persiste , prova con :

SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta
FROM (( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
WHERE u.nome ILIKE '%'  AND  u.codice_regionale ILIKE '%'  AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null



inserendo  anche ev.  nome utente o codice regionale di un singolo MMG

Se anche cosi , non dovesse restituire nessuna riga, abbiamo MillePS con schemi diversi ; se invece dovesse funzionare aggiungere progressivamente un' altra query   ( spostando /* dal primo -->  davanti al secondo UNION

Sergio
Per completezza, la prima query  da 0 anche a me, la seconda mi estrae tutti i paz del mio database (miei e dell'associato) se metto mio nome al posto di u_nome e mio codice regionale dopo mi da 0.
Forse non ho il problema sinusite o bronchite xche' se metto dono al posto di sinusite sulla prima query mi va..
Mario
P.S. scoperto l'arcano... I problemi sinusite e bronchite sono stati inseriti prima delle date immesse. Ho provato a variare l'inizio della ricerca ed anche a me estrae i p. con il problema bronchite. Se metto dono al posto di bronchite mi andava xce' i problemi con "dono" erano inseriti in quell' arco di tempo.
Grazie Mario x le prove e le utili Info e di conseguenza ho provato a modificare la query in tal modo :

SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , l.data_open As ev_d , pr_descr ||' , '|| Addenda As descriz , cp_code As icd9_referto , '' As posologia , '' As act , Cast( '1' AS SmallInt) As n_ord
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice )
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31' ) AND l.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , t.data_open , t.co_des , t.te_npezzi , t.po_des , t.co_atc , '2'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_terap t ON p.codice = t.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31' AND  t.data_open Between '2015-01-01' And '2016-03-31')
AND l.pb_code = t.pb_code AND t.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , a.data_open , a.ac_des , a.ac_val , a.ac_tipo , '' , '3'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_accert a ON p.codice = a.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31'  AND  a.data_open Between '2015-01-01' And '2016-03-31')
AND l.pb_code = a.pb_code AND a.ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , d.data_open , d.de_descr , '' , '' , '' , '4'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_descriz d ON p.codice = d.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31'  AND  d.data_open Between '2015-01-01' And '2016-03-31')
AND l.pb_code = d.pb_code AND d.data_open IS NOT Null
ORDER BY 1 , 2 , 11 , 7
LIMIT 150 OFFSET 0



Sorprende invece il risultato ottenuto con la seconda query : 0 righe inserendo ( iniziali )  nome utente e/o codice regionale di un singolo MMG :



SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta
FROM (( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
WHERE u.nome ILIKE '%' AND u.codice_regionale ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null



apparentemente senza spiegazioni, se si utilizza almeno in parte uno dei 2 campi ottenuti con :  SELECT * FROM v_utenti

Saluti ,  Sergio

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2901
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  mario shirt il Sab 18 Mar 2017 - 9:35

Cervino ha scritto:
mario shirt ha scritto:
Per completezza, la prima query  da 0 anche a me, la seconda mi estrae tutti i paz del mio database (miei e dell'associato) se metto mio nome al posto di u_nome e mio codice regionale dopo mi da 0.
Forse non ho il problema sinusite o bronchite xche' se metto dono al posto di sinusite sulla prima query mi va..
Mario
P.S. scoperto l'arcano... I problemi sinusite e bronchite sono stati inseriti prima delle date immesse. Ho provato a variare l'inizio della ricerca ed anche a me estrae i p. con il problema bronchite. Se metto dono al posto di bronchite mi andava xce' i problemi con "dono" erano inseriti in quell' arco di tempo.
Grazie Mario x le prove e le utili Info e di conseguenza ho provato a modificare la query in tal modo :

SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , l.data_open As ev_d , pr_descr ||' , '|| Addenda As descriz , cp_code As icd9_referto , '' As posologia , '' As act , Cast( '1' AS SmallInt) As n_ord
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice )
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31' ) AND l.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , t.data_open , t.co_des , t.te_npezzi , t.po_des , t.co_atc , '2'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_terap t ON p.codice = t.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31' AND  t.data_open Between '2015-01-01' And '2016-03-31')
AND l.pb_code = t.pb_code AND t.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , a.data_open , a.ac_des , a.ac_val , a.ac_tipo , '' , '3'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_accert a ON p.codice = a.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31'  AND  a.data_open Between '2015-01-01' And '2016-03-31')
AND l.pb_code = a.pb_code AND a.ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open IS NOT Null
UNION
SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , d.data_open , d.de_descr , '' , '' , '' , '4'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_descriz d ON p.codice = d.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31'  AND  d.data_open Between '2015-01-01' And '2016-03-31')
AND l.pb_code = d.pb_code AND d.data_open IS NOT Null
ORDER BY 1 , 2 , 11 , 7
LIMIT 150 OFFSET 0



Sorprende invece il risultato ottenuto con la seconda query : 0 righe inserendo ( iniziali )  nome utente e/o codice regionale di un singolo MMG :



SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta
FROM (( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
WHERE u.nome ILIKE '%' AND u.codice_regionale ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null



apparentemente senza spiegazioni, se si utilizza almeno in parte uno dei 2 campi ottenuti con :  SELECT * FROM v_utenti

Saluti ,  Sergio
La nuova prima query ok, ma mi spieghi cosa hai modificato e cosa cerca: cerca le terapie ai paz con diagnosi di bronchite o sinusite in qualsiasi data ma prescritta nel periodo inserito?

Per la seconda anche io non capisco, ho inserito quello che mi da la query riferita alla ricerca degli utenti uguale, minuscolo, maiuscolo con %, messo LIKE al posto di Ilike risultato sempre 0... Misteri !!!
Buon fine settimana
Mario
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3029
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 62

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Cervino il Dom 19 Mar 2017 - 7:38

mario shirt ha scritto:
Cervino ha scritto:
...
Sorprende invece il risultato ottenuto con la seconda query : 0 righe inserendo ( iniziali )  nome utente e/o codice regionale di un singolo MMG :

SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta
FROM (( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
WHERE u.nome ILIKE '%' AND u.codice_regionale ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null


apparentemente senza spiegazioni, se si utilizza almeno in parte uno dei 2 campi ottenuti con :  SELECT * FROM v_utenti

Saluti ,  Sergio
La nuova prima query ok, ma mi spieghi cosa hai modificato e cosa cerca: cerca le terapie ai paz con diagnosi di bronchite o sinusite in qualsiasi data ma prescritta nel periodo inserito?

Per la seconda anche io non capisco, ho inserito quello che mi da la query riferita alla ricerca degli utenti uguale, minuscolo, maiuscolo con %, messo LIKE al posto di Ilike risultato sempre 0... Misteri !!!           Buon fine settimana       Mario
Nella prima query ho semplicemente uniformato il periodo di ricerca ( da variare secondo necessità ) nelle 4 Tabelle da cui estrarre i Dati, esattamente come hai già compreso ;   per la seconda query il mistero ... apparentemente persiste , una spiegazione logica sembra difficile da trovare , probabilmente il secondo Link   u.userid = n.pa_medi   fra  nos_002   v_utenti   non funziona correttamente  nella  doppia giunzione fra le 3 tabelle   pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi   

Per favore potresti verificare se il problema persiste anche utilizzando PgAdmin 3 o 4 ? comunque in  PgAdmin il problema si puo' facilmente aggirare in vari modi , grazie .  Ciao  Buona  Domenica  Sergio

PS :  la  query puo' essere scritta in modo da separare i campi delle varie tabelle :

SELECT InitCap( u.cognome||' '||u.nome) As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( l.data_open AS Char(10)) AS pbl_inizio , pr_descr ||' , '|| Addenda As pbl , cp_code As icd9 , '' AS descr_d ,'' AS descriz , '' AS accert_d ,'' As esame , '' AS esito ,'' AS ac_tipo , '' As Terap_d , '' As Terapia , '' As n_pezzi , '' As posologia , '' As act , Cast( '1' AS SmallInt) As n_ord
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice )
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31' ) AND l.data_open IS NOT Null
UNION
SELECT InitCap( u.cognome||' '||u.nome) As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta ,'','','', Cast( d.data_open AS Char(10)) , d.de_descr ,'','','','','','','','','',  '2'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_descriz d ON p.codice = d.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31'  AND  d.data_open Between '2015-01-01' And '2016-03-31')
AND l.pb_code = d.pb_code AND d.data_open IS NOT Null
UNION
SELECT InitCap( u.cognome||' '||u.nome) As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta ,'','','','','', Cast( a.data_open AS Char(10)) , a.ac_des As esame , a.ac_val AS esito, a.ac_tipo AS ac_tipo, '','','','','','3'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_accert a ON p.codice = a.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31'  AND  a.data_open Between '2015-01-01' And '2016-03-31')
AND l.pb_code = a.pb_code AND a.ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open IS NOT Null
UNION
SELECT InitCap( u.cognome||' '||u.nome) As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta ,'','','','','','','','','', Cast( t.data_open AS Char(10)) , t.co_des , t.te_npezzi , t.po_des , t.co_atc , '4'
FROM ((( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
LEFT Outer JOIN cart_problemi l ON p.codice = l.codice ) LEFT Outer JOIN cart_terap t ON p.codice = t.codice
WHERE u.nome ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null
AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND l.data_open Between '2015-01-01' And '2016-03-31' AND  t.data_open Between '2015-01-01' And '2016-03-31')
AND l.pb_code = t.pb_code AND t.data_open IS NOT Null
ORDER BY 1 , 2 , 8 desc , 7 , 10 desc , 11 , 15 desc , 16 , 19 , 20
LIMIT 150 OFFSET 0

                                oppure  in  modo  piu'  semplice  ( ma non utilizzabile con l' attuale versione di MU ) :


WITH mmg AS ( SELECT u.userid , InitCap( u.cognome||' '||u.nome ) As mmg , codice_regionale As ssr_code FROM v_utenti u WHERE nome ILIKE '%' AND codice_regionale ILike '%' ) ,
evento AS ( SELECT codice , pr_descr ||' , '|| addenda As pbl , cp_code As pbl_code , pb_code , Cast( data_open As Char(10)) As pbl_onset FROM cart_problemi WHERE userid IN ( Select userid From mmg ) AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND data_open Between '2015-01-01' And '2016-03-31' )) ,
paz_ssr AS ( SELECT p.codice , p.cognome , p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( p.sesso As Char(1)) FROM pazienti p LEFT Outer JOIN nos_002 n On p.codice = n.codice WHERE p.codice IN ( Select codice From evento ) And p.pa_convenzione = 'S' And ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null ) ,
accert AS ( SELECT a.codice ,Cast( a.data_open As Char(10)) As acc_d , a.ac_des As accert , a.ac_val As acc_v , ac_tipo FROM cart_accert a WHERE a.codice IN ( Select codice From evento ) AND pb_code IN ( Select pb_code From evento ) AND ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open Between '2015-01-01' And '2016-03-31' ) ,
diario AS ( SELECT codice , Cast( data_open As Char(10)) As diario_d , de_descr As diario FROM cart_descriz WHERE codice IN ( Select codice From evento ) AND pb_code IN ( Select pb_code From evento ) AND data_open Between '2015-01-01' And '2016-03-31' ) ,
terapia AS ( SELECT codice , Cast( data_open As Char(10)) As terap_d , co_des As drug , te_npezzi As n_pezzi , po_des As posologia , co_atc As atc , pb_code FROM cart_terap WHERE codice IN ( Select codice From paz_ssr) AND pb_code IN ( Select pb_code From evento ) AND data_open Between '2015-01-01' And '2016-03-31' )
SELECT (Select mmg From mmg ) As mmg , cognome , nome , nascita , sesso , eta , pbl_onset , pbl , pbl_code , '' As diario_d , '' AS diario , '' As acc_d ,'' As accert ,'' As acc_v , '' As ac_tipo , '' As terap_d, '' As drug ,'' As n_pezzi, '' As posologia ,'' As atc
FROM paz_ssr p LEFT JOIN evento l ON p.codice = l.codice WHERE pbl_onset IS Not Null
UNION
SELECT (Select mmg From mmg ) As mmg , cognome , nome , nascita , sesso , eta ,'','','', diario_d , diario, '','','','','','','','',''
FROM paz_ssr p LEFT JOIN diario d ON p.codice = d.codice WHERE diario_d IS Not Null
UNION
SELECT (Select mmg From mmg ) As mmg , cognome , nome , nascita , sesso , eta ,'','','','','', acc_d , accert , acc_v , ac_tipo ,'','','','',''
FROM paz_ssr p LEFT JOIN accert a ON p.codice = a.codice WHERE acc_d IS Not Null
UNION
SELECT (Select mmg From mmg ) As mmg , cognome , nome , nascita , sesso , eta ,'','','','','','','','','', terap_d , drug , n_pezzi , posologia , atc
FROM paz_ssr p LEFT JOIN terapia t ON p.codice = t.codice WHERE terap_d IS Not Null
ORDER BY 1 , 2 , 7 desc , 10 desc , 12 desc , 16 desc

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2901
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  mario shirt il Dom 19 Mar 2017 - 12:23

Cervino ha scritto:
mario shirt ha scritto:
Cervino ha scritto:
...
Sorprende invece il risultato ottenuto con la seconda query : 0 righe inserendo ( iniziali )  nome utente e/o codice regionale di un singolo MMG :

SELECT u.cognome||' '||u.nome As mmg , p.cognome , p.nome , p.nascita , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta
FROM (( pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi )
WHERE u.nome ILIKE '%' AND u.codice_regionale ILIKE '%' AND p.pa_convenzione = 'S' AND ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null


apparentemente senza spiegazioni, se si utilizza almeno in parte uno dei 2 campi ottenuti con :  SELECT * FROM v_utenti

Saluti ,  Sergio
La nuova prima query ok, ma mi spieghi cosa hai modificato e cosa cerca: cerca le terapie ai paz con diagnosi di bronchite o sinusite in qualsiasi data ma prescritta nel periodo inserito?

Per la seconda anche io non capisco, ho inserito quello che mi da la query riferita alla ricerca degli utenti uguale, minuscolo, maiuscolo con %, messo LIKE al posto di Ilike risultato sempre 0... Misteri !!!           Buon fine settimana       Mario
Nella prima query ho semplicemente uniformato il periodo di ricerca ( da variare secondo necessità ) nelle 4 Tabelle da cui estrarre i Dati, esattamente come hai già compreso ;   per la seconda query il mistero ... apparentemente persiste , una spiegazione logica sembra difficile da trovare , probabilmente il secondo Link   u.userid = n.pa_medi   fra  nos_002   v_utenti   non funziona correttamente  nella  doppia giunzione fra le 3 tabelle   pazienti p LEFT Outer JOIN nos_002 n ON p.codice = n.codice ) LEFT Outer JOIN v_utenti u ON u.userid = n.pa_medi   

Per favore potresti verificare se il problema persiste anche utilizzando PgAdmin 3 o 4 ? comunque in  PgAdmin il problema si puo' facilmente aggirare in vari modi , grazie .  Ciao  Buona  Domenica  Sergio

Sergio ho provato con copia e incolla su PgAdmin 3, il mio MW di casa e' monoutente e la query mi ha dato tutti i miei paz. Inserendo il cognome al posto del nome mi ha dato risultato 0, mettendo cod regionale o nome giusto l'elenco e' venuto..
Mario
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3029
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 62

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  mario shirt il Dom 19 Mar 2017 - 13:18

Cervino ha scritto:
                                oppure  in  modo  piu'  semplice  ( ma non utilizzabile con l' attuale versione di MU ) :


WITH mmg AS ( SELECT u.userid , InitCap( u.cognome||' '||u.nome ) As mmg , codice_regionale As ssr_code FROM v_utenti u WHERE nome ILIKE '%' AND codice_regionale ILike '%' ) ,
evento AS ( SELECT codice , pr_descr ||' , '|| addenda As pbl , cp_code As pbl_code , pb_code , Cast( data_open As Char(10)) As pbl_onset FROM cart_problemi WHERE userid IN ( Select userid From mmg ) AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND data_open Between '2015-01-01' And '2016-03-31' )) ,
paz_ssr AS ( SELECT p.codice , p.cognome , p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( p.sesso As Char(1)) FROM pazienti p LEFT Outer JOIN nos_002 n On p.codice = n.codice WHERE p.codice IN ( Select codice From evento ) And p.pa_convenzione = 'S' And ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null ) ,
accert AS ( SELECT a.codice ,Cast( a.data_open As Char(10)) As acc_d , a.ac_des As accert , a.ac_val As acc_v , ac_tipo FROM cart_accert a WHERE a.codice IN ( Select codice From evento ) AND pb_code IN ( Select pb_code From evento ) AND ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open Between '2015-01-01' And '2016-03-31' ) ,
diario AS ( SELECT codice , Cast( data_open As Char(10)) As diario_d , de_descr As diario FROM cart_descriz WHERE codice IN ( Select codice From evento ) AND pb_code IN ( Select pb_code From evento ) AND data_open Between '2015-01-01' And '2016-03-31' ) ,
terapia AS ( SELECT codice , Cast( data_open As Char(10)) As terap_d , co_des As drug , te_npezzi As n_pezzi , po_des As posologia , co_atc As atc , pb_code FROM cart_terap WHERE codice IN ( Select codice From paz_ssr) AND pb_code IN ( Select pb_code From evento ) AND data_open Between '2015-01-01' And '2016-03-31' )
SELECT (Select mmg From mmg ) As mmg , cognome , nome , nascita , sesso , eta , pbl_onset , pbl , pbl_code , '' As diario_d , '' AS diario , '' As acc_d ,'' As accert ,'' As acc_v , '' As ac_tipo , '' As terap_d, '' As drug ,'' As n_pezzi, '' As posologia ,'' As atc
FROM paz_ssr p LEFT JOIN evento l ON p.codice = l.codice WHERE pbl_onset IS Not Null
UNION
SELECT (Select mmg From mmg ) As mmg , cognome , nome , nascita , sesso , eta ,'','','', diario_d , diario, '','','','','','','','',''
FROM paz_ssr p LEFT JOIN diario d ON p.codice = d.codice WHERE diario_d IS Not Null
UNION
SELECT (Select mmg From mmg ) As mmg , cognome , nome , nascita , sesso , eta ,'','','','','', acc_d , accert , acc_v , ac_tipo ,'','','','',''
FROM paz_ssr p LEFT JOIN accert a ON p.codice = a.codice WHERE acc_d IS Not Null
UNION
SELECT (Select mmg From mmg ) As mmg , cognome , nome , nascita , sesso , eta ,'','','','','','','','','', terap_d , drug , n_pezzi , posologia , atc
FROM paz_ssr p LEFT JOIN terapia t ON p.codice = t.codice WHERE terap_d IS Not Null
ORDER BY 1 , 2 , 7 desc , 10 desc , 12 desc , 16 desc

Questa non va  con MU ma anche con PgAdmin mi da:
ERRORE: più di una riga restituita da una sottoquery usata come espressione
Stato SQL: 21000


Mario
 
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3029
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 62

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Cervino il Dom 19 Mar 2017 - 22:30

Grazie per le prove ; nel mio caso funzionano perfettamente, restituendo lo stesso numero di righe sia in MU che in PgAdmin ;  comunque l' unica subquery dovrebbe essere :
SELECT (Select mmg From mmg ) As mmg , ...  e sicuramente in caso di ricerca in un MillePS MultiUtente dovrebbe dare errore ;
proverei a rieseguire la prima parte della query :

WITH mmg AS ( SELECT u.userid , InitCap( u.cognome||' '||u.nome ) As mmg_n , codice_regionale As ssr_code FROM v_utenti u WHERE nome ILIKE '%' AND codice_regionale ILike '%' ) ,
evento AS ( SELECT codice , pr_descr ||' , '|| addenda As pbl , cp_code As pbl_code , pb_code , Cast( data_open As Char(10)) As pbl_onset FROM cart_problemi WHERE userid IN ( Select userid From mmg ) AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND data_open Between '2015-01-01' And '2016-03-31' )) ,
paz_ssr AS ( SELECT p.codice , p.cognome , p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( p.sesso As Char(1)) FROM pazienti p LEFT Outer JOIN nos_002 n On p.codice = n.codice WHERE p.codice IN ( Select codice From evento ) And p.pa_convenzione = 'S' And ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null )
SELECT (Select mmg_n From mmg ) As mmg_n , cognome , nome , nascita , sesso , eta , pbl_onset , pbl , pbl_code , '' As diario_d , '' AS diario , '' As acc_d ,'' As accert ,'' As acc_v , '' As ac_tipo , '' As terap_d, '' As drug ,'' As n_pezzi, '' As posologia ,'' As atc
FROM paz_ssr p LEFT JOIN evento l ON p.codice = l.codice WHERE pbl_onset IS Not Null
ORDER BY 1 , 2


se l' errore persiste , proverei ad inserire le iniziali di nome Utente o codice_regionale  ;  se per caso il problema si risolve , eseguire la query completa

WITH mmg AS ( SELECT u.userid , InitCap( u.cognome||' '||u.nome ) As mmg_n , codice_regionale As ssr_code FROM v_utenti u WHERE nome ILIKE '%' AND codice_regionale ILike '%' ) ,
evento AS ( SELECT codice , pr_descr ||' , '|| addenda As pbl , cp_code As pbl_code , pb_code , Cast( data_open As Char(10)) As pbl_onset FROM cart_problemi WHERE userid IN ( Select userid From mmg ) AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND data_open Between '2015-01-01' And '2016-03-31' )) ,
paz_ssr AS ( SELECT p.codice , p.cognome , p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( p.sesso As Char(1)) FROM pazienti p LEFT Outer JOIN nos_002 n On p.codice = n.codice WHERE p.codice IN ( Select codice From evento ) And p.pa_convenzione = 'S' And ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null ) ,
accert AS ( SELECT a.codice ,Cast( a.data_open As Char(10)) As acc_d , a.ac_des As accert , a.ac_val As acc_v , ac_tipo FROM cart_accert a WHERE a.codice IN ( Select codice From evento ) AND pb_code IN ( Select pb_code From evento ) AND ac_tipo NOT IN ( '00' , 'STI' , 'EO' , '_SG' ) AND a.data_open Between '2015-01-01' And '2016-03-31' ) ,
diario AS ( SELECT codice , Cast( data_open As Char(10)) As diario_d , de_descr As diario FROM cart_descriz WHERE codice IN ( Select codice From evento ) AND pb_code IN ( Select pb_code From evento ) AND data_open Between '2015-01-01' And '2016-03-31' ) ,
terapia AS ( SELECT codice , Cast( data_open As Char(10)) As terap_d , co_des As drug , te_npezzi As n_pezzi , po_des As posologia , co_atc As atc , pb_code FROM cart_terap WHERE codice IN ( Select codice From paz_ssr) AND pb_code IN ( Select pb_code From evento ) AND data_open Between '2015-01-01' And '2016-03-31' )
SELECT (Select mmg_n From mmg ) As mmg_n , cognome , nome , nascita , sesso , eta , pbl_onset , pbl , pbl_code , '' As diario_d , '' AS diario , '' As acc_d ,'' As accert ,'' As acc_v , '' As ac_tipo , '' As terap_d, '' As drug ,'' As n_pezzi, '' As posologia ,'' As atc
FROM paz_ssr p LEFT JOIN evento l ON p.codice = l.codice WHERE pbl_onset IS Not Null
UNION
SELECT (Select mmg_n From mmg ) As mmg_n , cognome , nome , nascita , sesso , eta ,'','','', diario_d , diario, '','','','','','','','',''
FROM paz_ssr p LEFT JOIN diario d ON p.codice = d.codice WHERE diario_d IS Not Null
UNION
SELECT (Select mmg_n From mmg ) As mmg_n , cognome , nome , nascita , sesso , eta ,'','','','','', acc_d , accert , acc_v , ac_tipo ,'','','','',''
FROM paz_ssr p LEFT JOIN accert a ON p.codice = a.codice WHERE acc_d IS Not Null
UNION
SELECT (Select mmg_n From mmg ) As mmg_n , cognome , nome , nascita , sesso , eta ,'','','','','','','','','', terap_d , drug , n_pezzi , posologia , atc
FROM paz_ssr p LEFT JOIN terapia t ON p.codice = t.codice WHERE terap_d IS Not Null
ORDER BY 1 , 2 , 7 desc , 10 desc , 12 desc , 16 desc


Concludendo purtroppo versioni diverse di MW e MU non sono perfettamente compatibili fra loro , pur avendo quasi la stessa struttura o schema di database riguardo alle interrogazioni tramite SQL ; inoltre MillePS MonoUtente e MultiUtente sembrano avere sorprendentemente, differenze rilevanti nel gestione del Link fra Medico e Paziente , con rilevante interferenza nelle indagini statistiche : situazione sconfortante ed alquanto disagevole per Tutti Noi Utenti 
Saluti ,  Sergio

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2901
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  mario shirt il Lun 20 Mar 2017 - 11:54

Cervino ha scritto:Grazie per le prove ; nel mio caso funzionano perfettamente, restituendo lo stesso numero di righe sia in MU che in PgAdmin ;  comunque l' unica subquery dovrebbe essere :
SELECT (Select mmg From mmg ) As mmg , ...  e sicuramente in caso di ricerca in un MillePS MultiUtente dovrebbe dare errore ;
proverei a rieseguire la prima parte della query :

WITH mmg AS ( SELECT u.userid , InitCap( u.cognome||' '||u.nome ) As mmg_n , codice_regionale As ssr_code FROM v_utenti u WHERE nome ILIKE '%' AND codice_regionale ILike '%' ) ,
evento AS ( SELECT codice , pr_descr ||' , '|| addenda As pbl , cp_code As pbl_code , pb_code , Cast( data_open As Char(10)) As pbl_onset FROM cart_problemi WHERE userid IN ( Select userid From mmg ) AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND data_open Between '2015-01-01' And '2016-03-31' )) ,
paz_ssr AS ( SELECT p.codice , p.cognome , p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( p.sesso As Char(1)) FROM pazienti p LEFT Outer JOIN nos_002 n On p.codice = n.codice WHERE p.codice IN ( Select codice From evento ) And p.pa_convenzione = 'S' And ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null )
SELECT (Select mmg_n From mmg ) As mmg_n , cognome , nome , nascita , sesso , eta , pbl_onset , pbl , pbl_code , '' As diario_d , '' AS diario , '' As acc_d ,'' As accert ,'' As acc_v , '' As ac_tipo , '' As terap_d, '' As drug ,'' As n_pezzi, '' As posologia ,'' As atc
FROM paz_ssr p LEFT JOIN evento l ON p.codice = l.codice WHERE pbl_onset IS Not Null
ORDER BY 1 , 2


se l' errore persiste , proverei ad inserire le iniziali di nome Utente o codice_regionale  ;  se per caso il problema si risolve , eseguire la query completa
Negativo . sempre 0 su MW multiutente. Provero' a casa sul monoutente..
Mario
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3029
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 62

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  mario shirt il Lun 20 Mar 2017 - 13:14

mario shirt ha scritto:
Cervino ha scritto:Grazie per le prove ; nel mio caso funzionano perfettamente, restituendo lo stesso numero di righe sia in MU che in PgAdmin ;  comunque l' unica subquery dovrebbe essere :
SELECT (Select mmg From mmg ) As mmg , ...  e sicuramente in caso di ricerca in un MillePS MultiUtente dovrebbe dare errore ;
proverei a rieseguire la prima parte della query :

WITH mmg AS ( SELECT u.userid , InitCap( u.cognome||' '||u.nome ) As mmg_n , codice_regionale As ssr_code FROM v_utenti u WHERE nome ILIKE '%' AND codice_regionale ILike '%' ) ,
evento AS ( SELECT codice , pr_descr ||' , '|| addenda As pbl , cp_code As pbl_code , pb_code , Cast( data_open As Char(10)) As pbl_onset FROM cart_problemi WHERE userid IN ( Select userid From mmg ) AND (( pr_descr ILIKE '%Bronchite%' OR pr_descr ILIKE '%Sinusite%' OR addenda ILIKE '%Bronchite%' OR addenda ILIKE '%Sinusite%' ) AND data_open Between '2015-01-01' And '2016-03-31' )) ,
paz_ssr AS ( SELECT p.codice , p.cognome , p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , Cast( p.sesso As Char(1)) FROM pazienti p LEFT Outer JOIN nos_002 n On p.codice = n.codice WHERE p.codice IN ( Select codice From evento ) And p.pa_convenzione = 'S' And ( n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or ( n.pa_drevoca Between Date( Today())-365 And Today() And n.motivo_revoca = 'S')) And p.decesso Is Null )
SELECT (Select mmg_n From mmg ) As mmg_n , cognome , nome , nascita , sesso , eta , pbl_onset , pbl , pbl_code , '' As diario_d , '' AS diario , '' As acc_d ,'' As accert ,'' As acc_v , '' As ac_tipo , '' As terap_d, '' As drug ,'' As n_pezzi, '' As posologia ,'' As atc
FROM paz_ssr p LEFT JOIN evento l ON p.codice = l.codice WHERE pbl_onset IS Not Null
ORDER BY 1 , 2


se l' errore persiste , proverei ad inserire le iniziali di nome Utente o codice_regionale  ;  se per caso il problema si risolve , eseguire la query completa
Negativo . sempre 0 su MW multiutente. Provero' a casa sul monoutente..
Mario
  negativo anche a casa monoutente, sempre 0.
Mario
avatar
mario shirt
Membro Junior
Membro Junior

Messaggi : 246
Punti : 3029
Voti per importanza dei messaggi : 4
Data d'iscrizione : 21.02.11
Età : 62

Visualizza il profilo dell'utente

Torna in alto Andare in basso

query veramente complessa

Messaggio  nanci giacinto il Lun 20 Mar 2017 - 22:42

buona sera purtroppo anche a me da sempre zero
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2857
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo dell'utente

Torna in alto Andare in basso

Re: query veramente complessa

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum