Hirdetés

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

  • nyunyu
    félisten

    Ki kell szednem a valid_from értékekből a legmagasabbat, ami kisebb vagy egyenlő, mint az aktuális dátum, majd ezek közül a legkisebb valid_to, ami nagyobb vagy egyenlő, mi ma. Ezt nekem nem szedte össze az sql server (tsql) egy select-ben.

    Most ezt a rank() függvényt nézegettem.

    Ezeket egy selectben nem tudod összeszedni, mivel az oszlopfüggvények egymástól függetlenül értékelődnek ki.
    Tehát nem max(valid_from)-hoz tartozó min(valid_to) értéket kapod vissza, hanem a globálisat.

    Maximum azt tudod tenni, hogy egy belső selectben leválogatod a max(valid_from)-okat minden termékhez, majd az a köré írt másik selectben kiveszed a min(valid_to)-t.

    Valahogy így:

    select product,
    price
    from products p
    join (select
    p1.product,
    a.max_valid_from,
    min(nvl(p1.valid_to, to_date('9999-12-31'))) min_valid_to
    from products p1
    join (select p2.product,
    max(nvl(p2.valid_from, to_date('0000-01-01'))) max_valid_to
    from products p2
    group by p2.product) a
    on a.product = p1.product
    and a.max_valid_from = p1.valid_from
    group by p1.product, a.max_valid_from) b
    on b.product = p.product
    and b.max_valid_from = nvl(p.valid_from, to_date('0000-01-01'))
    and b.min_valid_to = nvl(p.valid_to, to_date('9999-12-31'));

    Oszlopfüggvények alapból figyelmen kívül hagyják a nullokat!

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