Angestellte die länger als 10 J. und 6 M. arbeiten anzeigen
Manuelw
- datenbank
Hallo!
Ich habe eine Frage. Ich habe eine SQL Anweisung geschrieben, die mir von allen Angestellten die Betriebszugehörigkeit in Jahren und Monaten anzeigt.
Jetzt möchte ich, dass nur die Datensätze ausgegeben werden die länger als 10 Jahre und 6 Monaten beschäftigt sind.
select last_name, Jahre, Monate
from (select last_name, trunc(months_between(sysdate, hire_date)/12,0) Jahre, trunc(mod(months_between(sysdate, hire_date),12),0) Monate
from employees)
Vielleich könnte mir da jemand weiter helfen. Ich habe es schon mit >= 10 und >=6 versucht, aber da wird zum Beispiel ein Datensatz der ja schon seit 11 Jahre angestellt ist, aber mit den Monaten unter 6 ist nicht angezeigt.
Übrigens!
Ich arbeite mit dem PL/SQL Developer auf einer Oracle 10g Enterprise Datenbank.
Mit freundlichen Grüßen
Manuel
select last_name, Jahre, Monate
In der DB steht echt ein Feld für Jahr und ein Feld für Monat?! Kein Timestamp oder ähnliches? Krass...
Nun ja - schau mal ob du etwas zu IF-Bedingungen in der Referenz von Oracle findest.
Damit sollte es dann gehn. Weil wenn das Jahr unter 10, brauchste Monat nicht checken. Und wenn Jahr über 10 auch nicht. Nur wenn Jahr 10 dann checke ob Monat 6 oder größer ist.
Mahlzeit,
select last_name, Jahre, Monate
In der DB steht echt ein Feld für Jahr und ein Feld für Monat?! Kein Timestamp oder ähnliches? Krass...
Ähm - nö? Wie kommst Du darauf? Schau Dir mal das innere SELECT an ...
MfG,
EKKi
Hallo,
Ich dachte zuerst, es geht um einen Gesetzesentwurf zur Neuregelung unbezahlter Praktika...hihi
Gruß, Nils
Hi,
Jetzt möchte ich, dass nur die Datensätze ausgegeben werden die länger als 10 Jahre und 6 Monaten beschäftigt sind.
Mit months_between(sysdate, hire_date) bekommst Du die Anzahl der Monate, die der Mitarbeiter bereits im Betrieb ist (das benutzt Du ja schon).
10 Jahre und 6 Monate sind 10*12 Monate + 6 Monate oder auch 126 Monate.
Du mußt also als Bedingung aufnehmen, daß months_between(sysdate, hire_date) größer als 126 ist.
cu,
Andreas
Hallo!
Irgendwie komme ich Hier nicht weiter.
Kann mir vielleicht jemand einen Tipp geben wie ich das ganze anfangen muss. Habe schon in meinen Unterlagen nachgesehen, aber das hat mir auch nicht weitergeholfen.
Mit freundlichen Grüßen,
Manuel
Hi,
Irgendwie komme ich Hier nicht weiter.
trotz fertiger Lösung, die Dir bereits genannt wurde?
Kann mir vielleicht jemand einen Tipp geben wie ich das ganze anfangen muss.
Jupp, mache ich. In 126 Monaten.
Cheatah
Hi!
Ich hab jetzt eine, so halbwegs, brauchbare Lösung gefunden.
Kennt vielleicht jemand noch eine andere/bessere Möglichkeit.
select last_name, Jahre, Monate
from (select last_name, trunc(months_between(sysdate, hire_date)/12,0) Jahre, trunc(mod(months_between(sysdate, hire_date),12),0) Monate,
trunc(months_between(sysdate, hire_date),0) month
from employees)
where month >= 126
Mit freundlichen Grüßen,
Manuelw
Hi!
Ich hab jetzt eine, so halbwegs, brauchbare Lösung gefunden.
wenn "du sie gefunden hast" und sie für dich funktioniert, muss sie ja in ordnung sein?
die bestandteile kommen jedenfalls verdächtig bekannt vor, aus den anderen posts in diesem thread
yo,
es gibt keinen grund für die unterabfrage in der FROM klausel, du kannst die bedingung direkt in die where klausel einbinden.
SELECT last_name,
trunc(months_between(sysdate, hire_date)/12,0) Jahre,
trunc(mod(months_between(sysdate, hire_date),12),0) Monate,
trunc(months_between(sysdate, hire_date),0) month
FROM employees
WHERE months_between(sysdate, hire_date) >= 126
;
Ilja