私は店の製品を持つテーブルを持っています。これらの製品にはvalid_fromとvalid_toの日付があります。私の質問では、各店舗の最初のx個のレコードだけが現在有効で、最後のinsert descで注文されたいと思っています。Mysql:グループの最初のxレコードを取得
SELECT * FROM
(
SELECT
s.id as shopid, ss.name as shopname, p.name as productname, p.validfrom, p.validto
FROM
product p
JOIN
shop s ON p.shopid = s.id
WHERE
s.status = 'Active' AND
(now() BETWEEN p.validfrom and p.validto)
ORDER BY p.insert DESC
) as a
GROUP BY
shopid
ORDER BY
shopname asc
これは明らかに私だけ各店舗の最新の記録を与えるが、私は、最新の2つのまたは3レコードを持つようにしたい:
私は現在、次のクエリを使用しています。どうすればこれを達成できますか?
ボーナスに関する質問:1店舗ごとに違います。だからショップAにとっては最初のレコードだけを、ショップBについては最初の2つのレコードを持っていたいと思います。 s.num_of_recordsのように、この番号を保持している各店舗のデータベースフィールドがあると仮定してもよいでしょう。
同様の問題(が重複する可能性は)正しい方向に私を得たが、それは完全に私の問題を解決していない(最新のコメントを参照してください)
[GROUP BY内のLIMITを使用してグループごとにN個の結果を得るには?](http://stackoverflow.com/questions/2129693/using-limit-within-group-by-to-get-n-results) -per-group) – e4c5
まったく同じではありませんが、正しい方向に私を得た同様の質問、ありがとう。私は今使用しています: 'code' @currcountを:= IF(@currvalue = s.id、@currcount + 1、1)ランクAS @currvalue:= s.id AS lastshopid は' を作るためにcode'同じ店舗にランクされていますが、これはいつも何らかの形では機能しません。いくつかのショップは適切なランク付けをしているものもあれば、1つがランキングであるものもあります。何が間違っている可能性がありますか?私はshopidによって注文しています。 – MNL
あなたのMySQLのバージョンは何ですか? –