Only display values of latest available event type

后端 未结 4 1224
南笙
南笙 2020-12-22 06:55

SQL Fiddle:

CREATE TABLE Purchasing (
    Event_Type VARCHAR(255),
    Campaign VARCHAR(255),
    Quantity_Offer VARCHAR(255),
    Quantity_         


        
4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-22 07:39

    This is a prioritization query.

    In MySQL 8+, use window functions:

    select campaign, event_type,
           coalesce(Quantity_Offer, Quantity_Order, Quantity_Received) as quantity
    from (select p.*,
                 row_number() over (partition by campaign order by field(event_type, 'Received', 'Order', 'Offer')) as seqnum
          from Purchasing p
         ) p
    where seqnum = 1;
    

    In earlier versions, a simple method is a correlated subquery:

    select campaign, event_type,
           coalesce(Quantity_Offer, Quantity_Order, Quantity_Received) as quantity
    from Purchasing p
    where event_type = (select p2.event_type
                        from Purchasing p2
                        where p2.campaign = p.campaign
                        order by field(p2.event_type, 'Received', 'Order', 'Offer')
                        limit 1
                       );
    

    If you have a lot of data, you want an index on Purcahsing(campaign, event_type) for this query.

    Here is a db<>fiddle.

提交回复
热议问题