给出一个表的例子:
id | item_id | user_id | bid_price
----------------------------------
任务是为所提供的集合中的每个bid_price
选择行 最小 item_id
。
例如:item_id = [1, 2, 3]
- 所以我需要选择最多三(3)行,最少bid_price
。
数据示例:
id | item_id | user_id | bid_price
----------------------------------
1 | 1 | 11 | 1
2 | 1 | 12 | 2
3 | 1 | 13 | 3
4 | 1 | 14 | 1
5 | 1 | 15 | 4
6 | 2 | 16 | 2
7 | 2 | 17 | 1
8 | 3 | 18 | 2
9 | 3 | 19 | 3
10 | 3 | 18 | 2
预期结果:
id | item_id | user_id | bid_price
----------------------------------
1 | 1 | 11 | 1
7 | 2 | 17 | 1
8 | 3 | 18 | 2
实际上,我使用的是Symfony / Docine DQL,但使用简单的SQL示例就足够了。
答案 0 :(得分:2)
对于行中的所有列,您可以在subselect上使用内部联接以获得最低出价
select m.id, m.item_id, m.user_id, m.bid_price
from my_table m
inner join (
select item_id, min(id) min_id, min(bid_price) min_price
from my_table
where item_id IN (1,2,3)
group by item_id
) t on t.item_id = m.item_id
and t.min_price= m.bid_price
and t.min_id = m.id
或..如果你有一些浮动数据类型,你可以使用acst进行无符号
select m.id, m.item_id, m.user_id, cast(m.bid_price as UNSIGNED)
from my_table m
inner join (
select item_id, min(id) min_id, min(bid_price) min_price
from my_table
where item_id IN (1,2,3)
group by item_id
) t on t.item_id = m.item_id
and t.min_price= m.bid_price
and t.min_id = m.id
答案 1 :(得分:1)
您可以在查询中使用MIN()
GROUP BY
:
SELECT id, item_id, MIN(bid_price) AS min_bid, user_id
FROM your_tbl
GROUP BY item_id
HAVING item_id in(1, 2, 3);
答案 2 :(得分:0)
使用此查询:
SELECT id, item_id, user_id, min(bid_price) as bid_price
FROM YOUR_TABLE_NAME
GROUP BY item_id;