我有一个像
这样的用例a 3
a 4
a 5
a 6
a 5
b 3
b 5
b 3
如何获得输出
a 4
a 5
b 5
b 3
选择a和b的高位数,但只选择2行
我现在写的查询,似乎没有用
SELECT id, barcode, actualsku, inventorycount
FROM ( SELECT pallet.id AS id,
pallet.barcode AS barcode,
inventoryunit.sku AS actualsku,
Count(inventoryunit.id) AS inventorycount
FROM (SELECT *
FROM mft.asset
WHERE container_type = 'PALLET'
AND location_type = 'PRIME' :: mft.location_type
AND is_deleted = FALSE
AND ( attributes ->> 'sku' :: text ) IS NOT NULL) pallet
LEFT OUTER JOIN (SELECT *
FROM mft.asset
WHERE asset_type = 'INVENTORYUNIT' :: mft.asset_type
AND is_deleted = FALSE) inventoryunit
ON pallet.id = inventoryunit.parent_id
GROUP BY inventoryunit.sku,
pallet.id,
pallet.barcode,
pallet.attributes ) test
WHERE (SELECT COUNT(*) FROM test as t
WHERE t.actualsku = test.actualsku
AND t.inventorycount <= test.inventorycount
) <= 2
答案 0 :(得分:0)
这通常使用窗口函数完成:
select col1, col2
from (
select col1, col2,
row_number() over (partition by col1 order by col2 desc) as rnk
from the_table
) t
where rnk <= 2
order by col1, col2;