からの値を含む行を取得しようとしている場合MAX(num) GROUP BY id
、これは一般的なパターンになる傾向があります...
WITH
sequenced_data
AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY id ORDER BY num DESC) AS sequence_id,
*
FROM
yourTable
)
SELECT
*
FROM
sequenced_data
WHERE
sequence_id = 1
編集
TeraDataがこれを許可するかどうかはわかりませんが、ロジックは理にかなっているようです...
SELECT
*
FROM
yourTable
WHERE
num = MAX(num) OVER (PARTITION BY id)
または多分...
SELECT
*
FROM
(
SELECT
*,
MAX(num) OVER (PARTITION BY id) AS max_num_by_id
FROM
yourTable
)
AS sub_query
WHERE
num = max_num_by_id
これは私の以前の回答とは少し異なります。複数のレコードが同じMAX(num)
.
編集
提案された SQL では、エラーはOVER()
句に GROUP BY にないフィールドが含まれているという事実に関連しています。これをしようとしているようです...
SELECT id, num FROM yourTable GROUP BY id
num
返される行ごとにそのフィールドに複数の値が存在する可能性があるため、無効です(返される行は によって定義されますGROUP BY id
)。
同様に、句num
の中に入れることはできません。OVER()
SELECT
id,
MAX(num), <-- Valid as it is an aggregate
MAX(num) <-- still valid
OVER(PARTITION BY id), <-- Also valid, as id is in the GROUP BY
MAX(num) <-- still valid
OVER(PARTITION BY num) <-- Not valid, as num is not in the GROUP BY
FROM
yourTable
GROUP BY
id
OVER()
句で何かを指定できない場合については、この質問を参照してください。