2017-04-20 1 views
0

zu berechnen Ich möchte das Alter des Mitarbeiters mit dem höchsten Gehalt in der Datenbank finden. Ich habe versucht, diese Abfragewie aus dem geburtsdatum in einer einzigen sql abfrage

SELECT DATEDIFF(SELECT DATE_FORMAT(SYSDATE(),'%Y-%m-%d'), 
(SELECT birth_date FROM salaries as s, employees as e WHERE salary = (SELECT MAX(salary) FROM salaries) and s.emp_no = e.emp_no)/365.25); 

aber seine nicht funktioniert. this picture contain database structure

+0

Dieser Link enthält die gesamte Datenbank https://github.com/datacharmer/test_db/archive/master.zip –

+0

Berechnen Sie das Alter zuerst und dann wo Aussage von Gehalt. –

Antwort

1

Ihre ursprüngliche Versuch schien einige kleinere Probleme zu haben, obwohl der Gesamtansatz Klang mir scheint. Nehmen Sie einfach die DATEDIFF() zwischen dem Geburtsdatum des Angestellten mit dem maximalen Gehalt und dem aktuellen Datum.

SELECT DATEDIFF(SYSDATE(), e.birth_date)/365.25 
FROM salaries s 
INNER JOIN employees e 
    ON s.emp_no = e.emp_no 
WHERE s.salary = (SELECT MAX(salary) FROM salaries) 

Änderungen, die ich vorgenommen habe, schließen die Verwendung eines expliziten inneren Joins zwischen Ihren Tabellen ein und berechnen den Datumsunterschied auf andere Weise.

Beachten Sie, dass diese Abfragestatistiken für mehrere Mitarbeiter sollten mehr als ein Mitarbeiter Bindung für den maximalen Gehalt zurückkehren würde. In Ermangelung weiterer Anforderungen scheint dies eine vernünftige Sache zu sein.

+0

thanx Geck es –

+0

für die Hilfe Danke arbeiten plz mir sagen, die Probleme in meiner Anfrage –

+0

Ihre Nutzung von 'DATE_FORMAT()' könnte nicht funktionieren (ich habe es nicht getestet), und Sie haben mehrere Schichten von verschachtelten Abfragen, die nicht notwendig. Eine Unterabfrage, um das maximale Gehalt zu finden, ist alles was Sie brauchen. –

Verwandte Themen