Manuelw: Angestellte die länger als 10 J. und 6 M. arbeiten anzeigen

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

  1. 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.

    1. 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

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Hallo,

    Ich dachte zuerst, es geht um einen Gesetzesentwurf zur Neuregelung unbezahlter Praktika...hihi

    Gruß, Nils

  3. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  4. 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

    1. 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

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
  5. 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

    1. 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

    2. 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