SQL用于选择用户的第二个最小值

时间:2018-03-12 15:25:26

标签: mysql

我想获得一份仅包含第二次购买日期的清单

我有以下列表:

    Order_id     User_id       Purchase_date
    1            1             01/01/2018
    2            1             02/01/2018
    3            1             02/01/2018
    4            2             03/01/2018
    5            2             03/01/2018
    6            3             01/01/2018
    7            3             02/01/2018

期望的结果:

    user_id       2nd_purchase_date
    1             02/01/20181 
    2             03/01/2018
    3             02/01/2018

谢谢

3 个答案:

答案 0 :(得分:1)

SQL DEMO

你可以这样做:

select user_id, Purchase_date AS '2nd_purchase_date'
from yourtable
where order_id in (
    select min(order_id)
    from yourtable T1
    where order_id > (
        select min(order_id)
        from yourtable
        where user_id = T1.user_id
    )
    group by user_id
)

答案 1 :(得分:0)

SELECT user_id, Purchase_date AS '2nd_purchase_date' FROM my_table LIMIT 1,1 GROUP BY user_id ORDER BY Purchase_date

答案 2 :(得分:0)

根据purchase_date正确排序order_id时,这是另一种选择。

SELECT user_id,
       purchase_date as '2nd_purchase_date'
from (   
SELECT a.order_id,
      a.user_id,
      a.Purchase_date,
      count(b.user_id) + 1 as rank
FROM  tbl a left join tbl b on a.order_id>b.order_id and a.user_id=b.user_id 
GROUP by  a.order_id,
      a.user_id ) t
where t.rank = 2      
order by user_id