下面的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万行数据库来优化这种或其他工作方式?
答案 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
。如果您的数据库不提供这种支持,那么您将需要重写逻辑。