इसे करने के कई तरीके हैं, लेकिन अगर आपको विंडो फ़ंक्शंस के साथ खेलने का मन करता है तो आप RANK()
कर सकते हैं या DENSE_RANK()
आईडी द्वारा वज़न और बाहरी क्वेरी में पहली रैंक को खत्म करें:
WITH cte AS (
SELECT id, ('{user,'||index-1||'}')::text[] as json_path, (value->'user_weight')::text::numeric AS weight
FROM user_table, jsonb_array_elements(json_field->'user')
WITH ordinality arr(value, index)
WHERE arr.value->>'user_name' IN ('Devang', 'Meet')
ORDER BY id, value->'user_weight' DESC
)
SELECT * FROM (
SELECT cte.*,
RANK() OVER (PARTITION BY id ORDER BY id,weight DESC
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS r
FROM cte) j
WHERE r > 1;
डेमो:db<>fiddle