2016-06-20 8 views
1

このようなSQLクエリがあり、別のテーブルの結合データがあるとします。フィールドごとの制限

SELECT 
    pr.num, pr.resort_id, p.src_mask 
FROM 
    rutraveler.rt_photo_resort AS pr 
    JOIN rutraveler.rt_photo AS p ON pr.photo_id = p.id 
WHERE pr.resort_id = '612' AND p.src_mask is not null 
ORDER BY num 
LIMIT 30 

これまでのところ、いくつかのresort_idに対していくつかのクエリを実行する必要があります。私たちは、各resort_idあたり30の項目より一つだけのクエリ(WHERE結果(612、333、111)でresort_idこれ以上を持っていないようにクエリを変更する方法

答えて

2

使用ROW_NUMBERresort_idごとの行をカウントする。

SELECT resort_id, num, resort_id, src_mask 
FROM 
(
    SELECT 
    pr.resort_id, pr.num, pr.resort_id, p.src_mask, 
    ROW_NUMBER() OVER (PARTITION BY pr.resort_id ORDER BY num) AS rn 
    FROM 
    rutraveler.rt_photo_resort AS pr 
    JOIN rutraveler.rt_photo AS p ON pr.photo_id = p.id 
    WHERE resort_id in (612, 333, 111) AND p.src_mask is not null 
) data 
WHERE rn <= 30 
ORDER BY resort_id, num; 
1

あなたは結果が間違っているパーティションに注文しないとROW_NUMBER()PARTITION BY

WITH Results_CTE AS 
(
    SELECT 
    pr.num, pr.resort_id, p.src_mask,ROW_NUMBER() over (PARTITION BY pr.resort_id ORDER BY num) As Row_number 
FROM 
    rutraveler.rt_photo_resort AS pr 
    JOIN rutraveler.rt_photo AS p ON pr.photo_id = p.id 
WHERE pr.resort_id IN (A,B,C) AND p.src_mask is not null 
) 

SELECT * 
FROM Results_CTE 
WHERE Row_number <= 30 
+0

CTEを使用することができます。 – holden321

+0

@ holden321 ..thanks ...更新しました –

関連する問題