Hirdetés

Új hozzászólás Aktív témák

  • Apollo17hu

    őstag

    válasz szmegma #1347 üzenetére

    Gondolkodtam, hogyan kellene továbbhaladni. Lehet, hogy túlbonyolítom, de 2 halmazt (lekérdezést) kellene alkotni. Az eddigiekhez képest módosítani kell a meglévő lekérdezésen, lejjebb írom, hogyan:

    1. azon munkások, akik munkaidején belülre esik a vizsgálandó időintervallum
    2. minden munkás minden munkavégzését minősíteni aszerint, hogy üti-e a vizsgált intervallumot -> ["oszlop"]

    Az elsőnek vhogy így kell kinéznie:

    SELECT DISTINCT workers_id
    FROM ...
    WHERE munkaido_start < checking_start AND munkaido_end > checking_end

    Ez csak a munkások azonosítóit adja vissza, semmi mást, és másra nincs is szükség.

    A második pedig az eddig megírt lekérdezésed módosítása. Annyit kell átírnod benne, hogy a WHERE -ből kitörlöd az eddigi szűréseket, helyette pedig beírod a CASE WHEN tartalmát (és így egyúttal az ["oszlop"] segédoszlopot ki is törölheted). Tehát így:

    SELECT DISTINCT workers_id
    FROM ...
    WHERE munkafolyamat_start < checking_tart AND munkafolyamat_end > checking_end

    Ez csak azokat a munkásokat listázza, akik már foglaltak a vizsgált intervallumot tekintve.

    Ha sikerült előállítani a fenti két lekérdezést, akkor LEFT (vagy RIGHT) JOIN-nal kösd össze őket! Az 1. halmazból "kivonva" a 2. halmazt azokat a munkásokat kapod, akik ráérnek a vizsgált időpontban.

    Így:

    SELECT munkaideje_megfelel.workers_id
    FROM (első lekérdezés kódja) AS munkaideje_megfelel
    LEFT JOIN (második lekérdezés kódja) AS munkafolyamatat_uti
    ON munkaideje_megfelel.workers_id = munkafolyamatat_uti.workers_id
    WHERE munkafolyamatat_uti.workers_id IS NULL

    A JOIN-okban nem vagyok biztos, én más szintaktikát szoktam használni, de a lényeg sztem látszik.

    Ha ez kész, akkor írom, hogyan csapd a workers_id mellé a szükséges infót (de erre már te is rá tudsz jönni).

Új hozzászólás Aktív témák