Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

SQL upit o neradnim danima

[es] :: Baze podataka :: SQL upit o neradnim danima

[ Pregleda: 2796 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

djalminha
djalminha
USA

Član broj: 4931
Poruke: 98
199.67.131.*



+7 Profil

icon SQL upit o neradnim danima10.07.2014. u 19:18 - pre 118 meseci
Radim izvestaj o nedeljnom ucinku radnika koristeci SQL upit i treba mi sledece:

Recimo da svako od njih radi po neki ili sve od 5 vrsta zadataka. Imam upit koji sabira te zadatke na nedeljnom nivou po vrsti.

E sad, da bi izracunao prosek po svakom radniku, treba da izuzmem dane kad nisu bili tu, tj imali su 0 proizvodnju u svakoj od tih 5 vrsta zadataka.

Te dane treba oduzeti od 5 radnih dana posto su subota i nedelja vec izuzeti. Kako ovo uvrstiti u upit?


[Ovu poruku je menjao djalminha dana 10.07.2014. u 20:31 GMT+1]
Tajna izdrzljivosti Kineskog zida lezi u lepljivom pirinchu!
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: SQL upit o neradnim danima10.07.2014. u 19:44 - pre 118 meseci
Bez date strukture tabela, teško da neko može da ti pomogne oko upita.
Bilo bi dobro da napišeš kako izgledaju tabele, a ne bi bilo loše i da postaviš upit bez obzira što nije tačan ili konačan.
Inače, čisto špekulativno cenim da ti samo fali uslov koji treba da ignoriše neradne dane i nule proizvodnje.
 
Odgovor na temu

djalminha
djalminha
USA

Član broj: 4931
Poruke: 98
199.67.140.*



+7 Profil

icon Re: SQL upit o neradnim danima10.07.2014. u 20:10 - pre 118 meseci
treba mi samo ideja, za uslov koji si spomenuo....tabelu na zalost ne mogu da postavim (a nije ni prakticno posto ima nekoliko stotina kolona)


Znaci trebaju mi zbirovi za: zadatak1,zadatak2,....zad5

Ali treba mi i "brojac" koji ce recimo oduzimati onaj radni dan kada su svi ovi zadaci 0 / po radniku.


I onda cu ja racunati proseke u excelu recimo.


Tajna izdrzljivosti Kineskog zida lezi u lepljivom pirinchu!
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: SQL upit o neradnim danima11.07.2014. u 09:56 - pre 118 meseci
Ako pretpostavim da imaš ovakvu tabelu u kojoj se loguju vremena provedena na taskovima:

Code:

EmployeeID    int               (ID employee-a za kog je logovano vreme)
TD            date              (Za koji dan-datum su logovani podaci)
T1            decimal(18, 1)    (Vreme provedeno na tasku 1)
T2            decimal(18, 1)    (Vreme provedeno na tasku 2)
T3            decimal(18, 1)    (Vreme provedeno na tasku 3)
T4            decimal(18, 1)    (Vreme provedeno na tasku 4)
T5            decimal(18, 1)    (Vreme provedeno na tasku 5)


Onda bi upit koji vraća prosečna vremena za dati period grupisano po employee-u izgledao ovako (u MS-SQL-u):

Code:

-- Calculate average work times (AT1, AT2, AT3, AT4, AT5) for the given period
SELECT WTS.EmployeeID, WT1/WD AS AT1, WT2/WD AS AT2, WT3/WD AS AT3, WT4/WD AS AT4, WT5/WD AS AT5 FROM
(
    -- Sum work times by employee (WT1, WT2, WT3, WT4, WT5) for the given period
    SELECT EmployeeID, SUM(T1) AS WT1, SUM(T2) AS WT2, SUM(T3) AS WT3, SUM(T4) AS WT4, SUM(T5) AS WT5
    FROM TaskLog WHERE (TD >= @StartDate) AND (TD <= @EndDate)
    GROUP BY EmployeeID
) AS WTS
LEFT OUTER JOIN
(
    -- Count work days by employee (WD) for the given period
    SELECT EmployeeID, COUNT(*) AS WD
    FROM TaskLog WHERE (TD >= @StartDate) AND (TD <= @EndDate) AND 
                       ((T1 > 0) OR (T2 > 0) OR (T3 > 0) OR (T4 > 0) OR (T5 > 0))
    GROUP BY EmployeeID
) AS WDS
ON (WTS.EmployeeID = WDS.EmployeeID)


Međutim, ako je pretpostavljena struktura tabele pogrešna onda sam džabe sve ovo pisao.
Ako zaista želiš da ti neko pomogne, onda postavi strukturu tabele makar je i izmisli ali da se idejno slaže sa stvarnom tabelom.
To što ti stvarna tabela ima više stotina kolona je nama nebitno, kada za tvoj problem koristi nekoliko, napiši samo te koje su bitne.
 
Odgovor na temu

djalminha
djalminha
USA

Član broj: 4931
Poruke: 98
192.193.216.*



+7 Profil

icon Re: SQL upit o neradnim danima11.07.2014. u 18:03 - pre 118 meseci
Ovo je pomoglo. Hvala puno.
Tajna izdrzljivosti Kineskog zida lezi u lepljivom pirinchu!
 
Odgovor na temu

djalminha
djalminha
USA

Član broj: 4931
Poruke: 98
*.knology.net.



+7 Profil

icon Re: SQL upit o neradnim danima31.07.2014. u 04:01 - pre 118 meseci
Da probam jos jednom.
Ovo je originalni upit (sa malim izmenama radi zastite podataka)

Code:
with sup as (
SELECT 'AA1234' as user_id, 'A*** A***' as user_name, 'RP1234' as supervisor_id, 'AAAA' as sup_name, 'BBBB' as hub, 'CCCC' as role from dual union all
SELECT 'AS5678' as user_id, 'A*** S***' as user_name, 'EC1234' as supervisor_id, 'EEEEE as sup_name, 'CCCC' as hub, 'CCCC' as role from dual union all
SELECT 'AH1234' as user_id, 'A**** H****' as user_name, 'None' as supervisor_id, 'Inactive Employee' as sup_name, 'DDDDD' as hub, 'None' as role from dual union all
....
)  

,  dt as (
    select decode('&start', 'mdy', trunc(sysdate) - 3, 'd', trunc(sysdate) - 1, 
            'w', next_day( trunc(sysdate) - interval '14' day, 'SUN'), 'm', trunc(trunc(sysdate, 'MM')-1, 'MM')
            , 'mdya', (trunc(sysdate) - 3)-(4/24), 'da', (trunc(sysdate) - 1) - (4/24), 'wa', next_day( trunc(sysdate) - interval '14' day, 'SUN')
            , 'mapac', trunc(trunc(sysdate, 'MM')-1, 'MM') - (4/24)) as start_dt
    , decode('&end', 'mdy', trunc(sysdate) - 2, 'd', trunc(sysdate), 
            'w', next_day( trunc(sysdate) - interval '7'  day, 'SUN'), 'm', trunc(sysdate, 'MM')
            , 'mdya', trunc(sysdate) - 2, 'da', trunc(sysdate)-(16/24), 'wa', next_day( trunc(sysdate) - interval '7'  day, 'SUN')
            , 'ma', trunc(sysdate, 'MM')-(16/24)) as end_dt from dual

, prd as (
    select /*+materialize*/ a.p38, a.case_id, a.case_internal_id, a.p20, ad.create_date
    , decode(ad.event, 'Assigned', trim(upper(replace(ad.comments, 'Case Owner Updated to ', ''))), trim(upper(substr(u.login_name, 1, 7)))) as soeid
    , ad.event
    , replace(replace(REGEXP_SUBSTR(ad.comments, '((Step changed|Status changed) from.......) as stepfrom
    , replace(replace(REGEXP_SUBSTR(ad.comments, '((Step changed|Status changed) from.......) as stepto
    from amlrcm.cases a
    inner join amlrcm.ACM_MD_CASE_TYPES t on t.case_type_internal_id = a.case_type_internal_id
    inner join amlrcm.ACM_MD_BUSINESS_UNITS bu on bu.bu_internal_id = a.bu_internal_id
    inner join amlrcm.acm_case_audits aa on aa.case_internal_id = a.case_internal_id
    inner join amlrcm.acm_audits ad on ad.audit_internal_id = aa.audit_internal_id
    left outer join amlrcm.acm_users u on u.user_internal_id = ad.user_internal_id
    where t.CASE_TYPE_IDENTIFIER like 'ROE L1%' and bu.bu_identifier <> 'ROE-GNRL' and ad.event in ('Status changed', 'Assigned')
    and ad.create_date >= (select start_dt from dt)
    and ad.create_date < (select end_dt from dt)
)
select sup.user_name, sup.user_id, sup.hub, sup.role, sup.sup_name, (select start_dt from dt) as strt_dt, (select end_dt from dt) as end_dt
, nvl(L1, 0) as L1
, nvl(L2, 0) as L2
, nvl(L3, 0) as L3
, nvl(L4, 0) as L4
, nvl(L5, 0) as L5
, nvl(L6, 0) as L6
, nvl(L7, 0) as L7
, nvl(L8, 0) as L8
, nvl(L9, 0) as L9
, nvl(L10, 0) as L10
, nvl(L11, 0) as L11
from sup 
left outer join (
    select case when stepfrom like '%Closed%' and stepto like '%Match%' then asgn_soeid else soeid end as soeid
        , sum(decode(p20, 'Ent', decode(stepto, 'L1 - Closed', 1, 0), 0)) as L1
        , sum(decode(p20, 'Ind', decode(stepto, 'L1 - Closed', 1, 0), 0)) as L2
        , sum(decode(trim(p20), NULL, decode(stepto, 'L1 - Closed', 1, 0), 0)) as L3
        , sum(decode(stepto, 'L1 - Closed', 1, 0)) as L4
        , sum(decode(p20, 'EnT', decode(stepto, 'L1 Sub-Case - Closed', 1, 0), 0)) as L5
        , sum(decode(p20, 'Indl', decode(stepto, 'L1 Sub-Case - Closed', 1, 0), 0)) as L6    
        , sum(decode(trim(p20), NULL, decode(stepto, 'L1 Sub-Case - Closed', 1, 0), 0)) as L7
        , sum(decode(stepto, 'L1 Sub-Case - Closed', 1, 0)) as L8
        , sum(case when stepfrom like 'L1 - Closed%' and stepto like 'L1 - Match%' then 1 else 0 end) as L9
        , sum(case when stepfrom like 'L1 Sub-Case - Closed%' and stepto like 'L1 Sub-Case - MatcH%' then 1 else 0 end) as L10
    from (
        select prd.case_id, prd.p20, prd.event, prd.create_date, prd.stepfrom, prd.stepto, prd.soeid
        , min(asgn.create_date) as asgn_dt, nvl(substr(min(to_char(asgn.create_date, 'yyyy-mm-dd HH24:mi:ss')||asgn.soeid), 20), '1') as asgn_soeid
        from prd 
        left outer join prd asgn on asgn.case_id = prd.case_id and asgn.event = 'Assigned' and asgn.create_date > prd.create_date 
        where prd.event = 'Status changed'
        group by prd.alert_id, prd.p20, prd.event, prd.create_date, prd.stepfrom, prd.stepto, prd.soeid
    ) d
    group by case when stepfrom like '%Closed%' and stepto like '%Match%' then asgn_soeid else soeid end
) p on p.soeid = sup.user_id
left outer join (
  select count(distinct ea.entity_id) as match_cnt, trim(upper(substr(u.login_name, 1, 7))) as soeid, u.full_name
    from cmt_extn.ROE_ENT_AUDITS ea
    inner join amlrcm.acm_audits ad on ad.audit_internal_id = ea.audit_internal_id
    left outer join amlrcm.acm_users u on u.user_internal_id = ad.user_internal_id
    where EA.ENTITY_TYPE = 'ROE_MATCh' and ad.event like 'Match Decision%'
    and ad.create_date >= (select start_dt from dt)
        and ad.create_date < (select end_dt from dt)



On mi trenutno daje broj uradjenih case-ova po analyst-u za vremenski period koji unesem na pocetku: dan, nedelja ili mesec.

E sad mi treba da izmenim da bi mi davao u nedeljnom i mesecnom izvestaju - ukupan broj radnih dana koji je svaki analyst imao, ukupan broj case-ova i prosek po danu.
Tajna izdrzljivosti Kineskog zida lezi u lepljivom pirinchu!
 
Odgovor na temu

djalminha
djalminha
USA

Član broj: 4931
Poruke: 98
192.193.216.*



+7 Profil

icon Re: SQL upit o neradnim danima31.07.2014. u 21:21 - pre 118 meseci
Ovo pokusavam da dobijem (poslednje tri kolone)


Name|Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Working Days|Total Cases |Daily Average
Analyst 1|0|10|10|10|10|10|0|5|50|10
Analyst 2|0|10|10|0|0|0|0|2|20|10
Analyst 3|0|0|10|10|10|10|10|4|50|12.5

a ovo proizvodi gornji upit trenutno


USER_NAME USER_ID HUB ROLE SUP_NAME STRT_DT END_DT L1 L2.....L10



Tajna izdrzljivosti Kineskog zida lezi u lepljivom pirinchu!
 
Odgovor na temu

[es] :: Baze podataka :: SQL upit o neradnim danima

[ Pregleda: 2796 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.