您可以通過一個值和爲了需要分區被其他:
SELECT name, txn_amount,
FROM (SELECT pt.*,
dense_rank() over (partition by name order by txn_amount desc) as nth_value
FROM payment_table pt
) pt
WHERE nth_value = X;
子查詢需要得到一個特定的價值。如果你想在同一行多個值,你可以用GROUP BY
:
SELECT name,
MAX(CASE WHEN nth_value = 1 THEN txn_amount END) as value_1,
MAX(CASE WHEN nth_value = 2 THEN txn_amount END) as value_2
FROM (SELECT pt.*,
dense_rank() over (partition by name order by txn_amount desc) as nth_value
FROM payment_table pt
) pt
WHERE nth_value = X
GROUP BY name;
注:DENSE_RANK()
會忽略重複。如果你也想看到這些(所以第二個值可以和第一個值相同),然後使用ROW_NUMBER()
。
您需要按名稱和順序按txn_amount desc進行分區。 –
謝謝你vkp你可以把這個例子,以確保我做到這一點正確 –