0

mysql を使用して注文テーブルからユーザーごとに最後の 5 つの注文を取得しようとしていますが、どのようにそれを行うことができませんでした。

注文は日付順に並んでいます。

mysql を使用して、ユーザーごとに最後の 5 つの注文を取得する必要があります

テーブル構造:

注文、BuyerId、日付

注文は次のように保存されます。

1,1,2013-07-01
2,1,2013-07-02
3,2,2013-07-03
4,2,2013-07-04
5,3,2013-07-06
6,2,2013-07-07
7,2,2013-07-08
8,1,2013-07-09

etc

OrderId はプライマリ インデックスであり、一意です

私を助けてください、私はこれを何時間も試みましたが、どうすればそれができませんでした.

4

2 に答える 2

2

これはうまくいくはずです-グループごとに行番号を確立する必要があります:

select *
from (
  select BuyerId, Date, 
    @rn:=if(@prevBuyerId=BuyerId,@rn+1,1) rn, 
    @prevBuyerId:=BuyerId
  from orders 
    join (select @rn:=0, @prevBuyerId:=0 ) t
  order by BuyerId, Date desc
  ) t
where rn <= 5

例を次に示します: http://sqlfiddle.com/#!2/bba76/5

余談ですが、limit と group by を使用したコメントには驚きました...

于 2013-07-21T21:11:20.330 に答える
1

次のようにして、最後の 5 つの注文を 1 つの行に表示することもできます。

select buyerid, substring_index(group_concat(order order by date desc), ',', 5) as orders5
from orders o
group by buyerid;

これにより、コンマ区切りのリストでそれらが返されます。実際に注文を取得したい場合は、それらに参加できます。

select o.*
from orders o join
     (select buyerid, substring_index(group_concat(order order by date desc), ',', 5) as orders5
      from orders o
      group by buyerid
     ) b
     on o.buyerid = b.buyerid and
        find_in_set(o.orderid, b.orders5) > 0;

ただし、変数を使用したバージョンの方がパフォーマンスが向上することを期待しています。

于 2013-07-21T21:54:32.680 に答える