Hirdetés

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

  • bambano
    titán

    Oracleben gyorsan összedobva:

    with munkanap as (
    select a.*
    from (
    select to_date('2023-12-31','yyyy-mm-dd') + rownum as actdate, to_char(to_date('2022-12-31','yyyy-mm-dd') + rownum, 'd') as dateid
    from (
    select rownum r
    from dual
    connect by rownum <= 5000)
    ) a
    left join days d
    on d.actdate = a.actdate
    and d.dateid = 0
    where a.dateid in (1,2,3,4,5)
    and d.actdate is null)
    select actdate
    from (
    select m.*, row_number() over (order by actdate asc) rn
    from munkanap m
    where m.actdate > to_date('2024-12-20','yyyy-mm-dd')) x
    where rn = 15;

    Ahogy néztem reggel, Postgre szintaxissal sokkal egyszerűbb lenne a munkanap CTE.

    én is megcsináltam, még éjjel :)

    with naptar as (
    select napok,
    (case when date_part('dow',napok) between 1 and 5 then 1 else 0 end)::integer
    *
    (case when calendar.date is null then 1 else 0 end)::integer as isworkday
    from
    generate_series(now()::date,now()::date+'60 days'::interval,'1 day'::interval) as napok
    left outer join
    calendar on napok=calendar.date)
    select napok::date,-1+sum(isworkday) over (order by napok) as workdays
    from naptar where isworkday=1;

    kb. ennyi az alap, ebből lehet közvetlen lekérdezést csinálni vagy window funkcióval és rownumberrel, vagy én csináltam belőle egy view-t és abból közvetlenül lehet selectelni.

    egy rakás lehetséges optimalizáció még van benne, például a két case helyett lehetne egyet, stb.

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