クエリが結果をやや裏返しの順序で返すようにしたいと考えています。私は顧客の注文のテーブルを持っており、N 個の最も古い注文を取得して処理したいと考えていますが、そのような場合は、処理されるさまざまな顧客の数を最大化する必要がありました。並べ替え順序は、通常は隣同士にあるものを可能な限り分散させるものであるため、「逆順」と表現しています。
CREATE TABLE custorders (
order_id integer PRIMARY KEY,
customer,
data
);
INSERT INTO custorders VALUES
(1,'joe','xyz'),
(2,'joe','abc'),
(3,'joe','def'),
(4,'sam','qwe'),
(5,'sam','rty');
次のような方法で、顧客ごとに最も古い注文を1つ取得できます
SELECT *
FROM custorders
WHERE order_id IN
(
SELECT MIN(order_id) FROM custorders GROUP BY customer
);
しかし、顧客ごとに 2 つの最も古い注文、または (私が本当に必要としている) 異なる顧客の数を最大化するすべての顧客にわたって最も古い 10 の注文を取得しようとして立ち往生しています。つまり、顧客が 20 人いる場合、10 人の異なる顧客が得られますが、複数の保留中の注文を持つ顧客が 8 人しかいない場合、結果には 2 人の顧客が複数回表示されます。
私は sqlite 3 で作業しているため、他のデータベースに固有の関数を使用したソリューションは役に立ちません。