Selezionare ultimo record di una sotto query

Ti ringrazio per l'impegno che ci stai mettendo per aiutarmi, ma qui non ne vengo fuori:
Cattura.PNG

Eppure ho ricontrollato 10 volte la query e mi sembra corretta.
Io uso Heidi SQL per testare le query, non credo dipenda da questo, ma tu cosa usi?
A questo punto cerco di allinearmi con il tuo ambiente.
Grazie.
 
scusami, ho dimenticato le chioccioline davanti ai nomi delle tabelle, toglile
SQL:
    FROM      dipendenti  d
    LEFT JOIN cooperative c ON d.cooperative_id = c.id
    LEFT JOIN assunzioni  a ON a.dipendenti_id  = d.id

a me servono per definire tabelle temporanee in modo da non dover creare un database per provare le query
 
  • Like
Reactions: stefanoxjx
Ciao,
avevo già tolto le chioccioline ma senza esito positivo.
Questa è la query sulla quale sto facendo prove ora:
Codice:
SELECT *
FROM (
    SELECT
      d.id             AS d_id
    , d.cognome        AS d_cognome
    , d.nome           AS d_nome
    , d.Cooperative_Id AS d_Cooperative_Id
    , c.id             AS c_id
    , c.cooperativa    AS c_cooperativa
    , a.id             AS a_id
    , a.dipendenti_id  AS a_dipendenti_id
    , a.tipo           AS a_tipo
    , a.dataassunzione AS a_dataassunzione
    , a.datadimissione AS a_datadimissione
    , ( SELECT max(x.dataassunzione) FROM assunzioni x WHERE x.dipendenti_id = d.id ) AS x_dataassunzione
    FROM      dipendenti  d
    LEFT JOIN cooperative c ON d.cooperative_id = c.id
    LEFT JOIN assunzioni  a ON a.dipendenti_id  = d.id
) y
WHERE ( a_dipendenti_id  is null OR ( a_datadimissione is not null AND x_dataassunzione = a_dataassunzione ) )
  AND ( d_cognome LIKE '%%' OR d_nome LIKE '%%' )
  AND d_Cooperative_Id = 1
ORDER BY d_cognome, d_nome "%%") AND d_Cooperative_Id = 1 ORDER BY d_cognome, d_nome

e questo è il risultato:


Cattura.PNG


Ho provato a modificare la query in vari modi cercando di capire dove sta il problema, ma ho sempre errore 1064.
 
il primo errore, riporta la chiocciolina,

il secondo errore evidenzia un copia incolla fatto male vedi la differenza tra la tua e la mia query, in particolare la parte terminale che deve essere
SQL:
) y
WHERE ( a_dipendenti_id  is null OR ( a_datadimissione is not null AND x_dataassunzione = a_dataassunzione ) )
--WHERE ( a_dipendenti_id  is null OR ( a_datadimissione is null AND x_dataassunzione = a_dataassunzione ) )
  AND ( d_cognome LIKE '%%' OR d_nome LIKE '%%' )
  AND d_Cooperative_Id = 1
ORDER BY d_cognome, d_nome

ovviamente puoi omettere la clausola where preceduta dal commento ( -- )
 
  • Like
Reactions: stefanoxjx
Ciao, scusa se non ho più risposto, ma visto che non riuscivo ad avere i risultati che volevo mi sono preso del tempo per fare un po' di prove e studiare l'argomento.
Alla fine credo di aver risolto il mio problema con una query banale:
Codice:
SELECT d.*, a.* FROM dipendenti d 
INNER JOIN assunzioni a ON a.dipendenti_id = d.id
WHERE d.Cooperative_Id = 1 AND a.datadimissione IS NULL GROUP BY d.id ORDER BY Cognome

Devo ancora capire se veramente è la soluzione al mio problema, perchè i dati da verificare sono tanti, ma da una prima analisi sembrerebbe essere ok.
Ti ringrazio comunque per l'impegno che ci hai messo per aiutarmi e anche per l'aiuto, perchè anche questa query è nata traendo spunto da quelle che mi hai proposto tu :)
 
Alla fine credo di aver risolto il mio problema con una query banale
sono contento che tu sia riuscito a risolvere, anche se provando la query che hai postato, non ottengo i risultati voluti,

puoi confrontare i risultati della query che seleziona i lavoratori non assunti " a.datadimissione IS NOT NULL" nella prima lista con i risultati della tua query nella seconda lista

le due liste differiscono in modo sostanziale, la tua query non soddisfa gli obiettivi indicati nel primo e nel settimo post

1625318811057.png


poi vedi tu ......
 

Allegati

  • 1625318503018.png
    1625318503018.png
    40,3 KB · Visite: 173
  • 1625318757792.png
    1625318757792.png
    40,1 KB · Visite: 180
Ultima modifica:
  • Like
Reactions: stefanoxjx
Ciao, come ti ho detto devo ancora finire di verificare se i risultati sono effettivamente quelli voluti.
Mi ci vorrà un po' di tempo :)
 

Discussioni simili