Hirdetés

Hirdetés

!!! SZERVERLEÁLLÁS, ADATVESZTÉS INFORMÁCIÓK !!!
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!

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

  • nyunyu

    félisten

    válasz nyunyu #5929 üzenetére

    Mármint sokkal egyszerűbb, mint ügyfelenként meghatározni az utolsó előfizetési dátumot, és az ahhoz tartozó rekordot visszakeresni az előfizetés táblában, hogy utána joinolhassam az előfizetőhöz:

    select u.*, s.status
    from users u
    left join (
    select *
    from subscription
    where (customer_id, createdate) in (
    select customer_id, max(createdate)
    from subscription
    group by customer_id) s
    on s.customer_id = u.customer_id;

    (Tényleg, Oraclen kívül van más olyan DB is, ami támogatja a sokoszlopos IN / NOT IN műveleteket?
    Ha jól rémlik, ez a szintaxis nincs szabványosítva)

    Valószínűleg ablakozós max() függvénnyel is lehetne írni, és akkor nem kellene a group by köré írt külső query:
    select u.*, s.status
    from users u
    left join (
    select *
    from subscription
    where createdate = max(createdate) over (partition by customer_id)
    ) s
    on s.customer_id = u.customer_id;

    Talán így a legrövidebb a kód.

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