2017-04-14 11 views
0

に相殺するために、クエリが、私はこのようなテーブルを持っている:リユース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つのセクションでそれを行う必要があります。

現在、n2と設定されており、オフセットは1に設定されていますが、両方とも他の値をとることができます。また、丸めを制限して欠損値があるかもしれないので、私は他の手段を使ってそれを修正することができますが、それをクエリ上に持たせると良いでしょう。

あなただけのシリアルがギャップレスであることが保証されていないので、あなたが部品を得るために、シリアルおよびモジュラスを使用することはできません神話を払拭するために例here

答えて

1

を見ることができます。あなたはrow_number()を使用することができます。

SELECT row_number() OVER() % 3 AS parts, * FROM products; 
parts |     id     | title | kind | created_at 
-------+--------------------------------------+-------+-----------+------------ 
    1 | 61c5292d-41f3-4e86-861a-dfb5d8225c8e | foo | standard | 2017/04/01 
    2 | def1d3f9-3e55-4d1b-9b42-610d5a46631a | bar | standard | 2017/04/02 
    0 | cc1982ab-c3ee-4196-be01-c53e81b53854 | qwe | standard | 2017/04/03 
    1 | 919c03b5-5508-4a01-a97b-da9de0501f46 | wqe | standard | 2017/04/04 
    2 | b3d081a3-dd7c-457f-987e-5128fb93ce13 | tyu | other  | 2017/04/05 
    0 | c6e9e647-e1b4-4f04-b48a-a4229a09eb64 | ert | irregular | 2017/04/06 
(6 rows) 

部品が均等にカウントされない限り、これは等しくなることはありません。

関連する問題