2017-03-31 41 views
0

考虑采用以下的表:取最近三个订单

  1. 客户电子邮件ID
  2. 付款方法(COD /网路银行/信用卡式/借记卡)
  3. 订单ID
  4. 订单创建日期
  5. 订单状态(成功/失败/取消)

如何从SQL中的这些表格中获取每个客户过去3个月的最后三个成功订单以及相关详细信息?

+1

看到这篇文章:HTTPS://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per- group-in-sql/ –

回答

1

这在MySQL中有点痛苦。可能最简单的方法是使用变量。

您的列名不清晰。和你有一些附加条件,但是这是基本的想法:

select t.* 
from (select t.*, 
      (@rn := if(@c = customerid, @rn + 1, 
         if(@c := customerid, 1, 1) 
         ) 
      ) as rn 
     from t cross join 
      (select @rn := 0, @c := '') params 
     order by customerid, orderdate desc 
    ) t 
where rn <= 3; 

您可以添加额外的where条件的子查询。

0

我希望这有助于

SELECT * 
FROM TABLENAME 
WHERE OrderStatus='Success' 
ORDER BY OrderCreationDate DESC 
LIMIT 3; 
+0

这将返回3行,OP要为每个客户3行* –