"select * from table;"以下の結果が得られます。 どのようにして各refについて最初の3つのレコードのみを表示するように制限できますか?SQLクエリで返されるレコードの数の制限
感謝のMicrosoft SQL Serverの2005+のために
ref other field
----------------------
1234 a
1234 b
1234 c
1234 d
1234 e
5678 a
5678 b
5678 c
5678 d
"select * from table;"以下の結果が得られます。 どのようにして各refについて最初の3つのレコードのみを表示するように制限できますか?SQLクエリで返されるレコードの数の制限
感謝のMicrosoft SQL Serverの2005+のために
ref other field
----------------------
1234 a
1234 b
1234 c
1234 d
1234 e
5678 a
5678 b
5678 c
5678 d
:
SELECT ref, OtherField
FROM (SELECT ref, OtherField,
ROW_NUMBER() OVER(PARTITION BY ref ORDER BY OtherField) AS RowNum
FROM YourTable) t
WHERE t.RowNum <= 3
同じクエリ、CTEを使用して:
オラクルでWITH cteRowNum AS (
SELECT ref, OtherField,
ROW_NUMBER() OVER(PARTITION BY ref ORDER BY OtherField) AS RowNum
FROM YourTable
)
SELECT ref, OtherField
FROM cteRowNum
WHERE RowNum <= 3
大変ありがとうございます – DarkW1nter
:
WITH subquery as
(
SELECT ref, row_number() over (partition by ref) rank, other_field
FROM my_table
)
SELECT ref, other_field from subquery where rank <= 3;
ルックアップOracle analytic functions SQL Serverで動作します
PostgreSQLとDB2にも同様に動作します –
別の解決策は、あなたは、DB、使用しているものを指定する必要があります2005+
Select ...
From MyTable As T
Cross Apply (
Select TOP 3 T2.OtherField
From MyTable As T2
Where T2.ref = T.ref
Order By T2.OtherField
) As Z
。たとえば、MySQLはOracleとは異なる回答をします。 – Riggy
私はMySQLで同じ問題があります。 –