根据其他值选择最小值

时间:2020-01-02 11:43:48

标签: sql phpmyadmin

下面的sql查询有更好的方法吗?不想删除并创建临时表只是想在1个查询中完成。 我正在尝试为价格选择最小值,具体取决于其定单卖出的价格明显高于购买中的价格,而当我尝试时它只会显示0个结果。

DROP TABLE `#temporary_table`;
CREATE TABLE `#temporary_table` (ID int(11),region int(11),nazwa varchar(100),price float,isBuyOrder int,volumeRemain int,locationID int,locationName varchar(100),systemID int,security_status decimal(1,1));
INSERT INTO `#temporary_table` SELECT * FROM hauling WHERE isBuyOrder=0 ORDER BY ID;
SELECT * FROM `#temporary_table`;
SELECT * FROM `#temporary_table` WHERE (ID,price) IN (select ID, MIN(price) from `#temporary_table` group by ID) order by `ID`

更新:当我尝试使用nvogel答案并检查分析结果时,我得到了: 是否有机会使用70万行数据库来优化这种或其他工作方式?

enter image description here

2 个答案:

答案 0 :(得分:2)

尝试一下:

[0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 3, 0, 0, 0, 1, 0, 2, 0, 0, 3, 0, 0]

答案 1 :(得分:0)

您根本不需要临时表。您基本上可以使用当前的逻辑:

Date

按h.id订购

还有许多其他方法可以编写类似的逻辑。但是,无需重写逻辑。您只需要在子查询中包括对SELECT h.* FROM hauling h WHERE h.isBuyOrder = 0 AND (h.id, h.price) IN (SELECT h2.id, MIN(h2.price) FROM hauling h2 WHERE h2.isBuyOrder = 0 ) 的比较即可。

请注意,并非所有数据库都支持带元组的isBuyOrder。如果您的数据库不提供这种支持,那么您将需要重写逻辑。