に相殺するために、クエリが、私はこのようなテーブルを持っている:リユースLIMIT上の操作のためにそれを使用するとPostgreSQL 9.4を使用してPostgreSQLの
CREATE TABLE products
AS
SELECT id::uuid, title, kind, created_at
FROM (VALUES
('61c5292d-41f3-4e86-861a-dfb5d8225c8e', 'foo', 'standard' , '2017/04/01'),
('def1d3f9-3e55-4d1b-9b42-610d5a46631a', 'bar', 'standard' , '2017/04/02'),
('cc1982ab-c3ee-4196-be01-c53e81b53854', 'qwe', 'standard' , '2017/04/03'),
('919c03b5-5508-4a01-a97b-da9de0501f46', 'wqe', 'standard' , '2017/04/04'),
('b3d081a3-dd7c-457f-987e-5128fb93ce13', 'tyu', 'other' , '2017/04/05'),
('c6e9e647-e1b4-4f04-b48a-a4229a09eb64', 'ert', 'irregular', '2017/04/06')
) AS t(id,title,kind,created_at);
はn
同じサイズの部分にデータを分割する必要があります。このテーブルに通常のid
があれば簡単ですが、uuid
があるので、私はmodulo
の操作を(私が知る限り)使用することはできません。
は、これまでのところ私はこれでした:
SELECT * FROM products
WHERE kind = 'standard'
ORDER BY created_at
LIMIT(
SELECT count(*)
FROM products
WHERE kind = 'standard'
)/2
OFFSET(
(
SELECT count(*)
FROM products
WHERE kind = 'standard'
)/2
)*1;
作品罰金を私は考えていない3回は良いアイデアです同じクエリを実行することは、count
は「高価」ではありません誰かが望んでいるたびに変更します/更新クエリは、3つのセクションでそれを行う必要があります。
現在、n
は2
と設定されており、オフセットは1
に設定されていますが、両方とも他の値をとることができます。また、丸めを制限して欠損値があるかもしれないので、私は他の手段を使ってそれを修正することができますが、それをクエリ上に持たせると良いでしょう。
あなただけのシリアルがギャップレスであることが保証されていないので、あなたが部品を得るために、シリアルおよびモジュラスを使用することはできません神話を払拭するために例here