我有子查询的MySQL查询 SQL fiddle
表结构是:
CREATE TABLE `wildberries` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`brand` VARCHAR(50) NULL DEFAULT NULL,
`subject` VARCHAR(50) NULL DEFAULT NULL,
`article` VARCHAR(50) NULL DEFAULT NULL,
`size` VARCHAR(50) NULL DEFAULT NULL,
`color` VARCHAR(50) NULL DEFAULT NULL,
`income` INT(11) NULL DEFAULT NULL,
`income_sum_price` VARCHAR(50) NULL DEFAULT NULL,
`ordered` VARCHAR(50) NULL DEFAULT NULL,
`ordered_sum_price` VARCHAR(50) NULL DEFAULT NULL,
`ordered_max_by_day` VARCHAR(50) NULL DEFAULT NULL,
`return_before_payment` VARCHAR(50) NULL DEFAULT NULL,
`return_before_payment_sum_price` VARCHAR(50) NULL DEFAULT NULL,
`sales_by_payment` INT(11) NULL DEFAULT NULL,
`sales_by_payment_sum_price` VARCHAR(50) NULL DEFAULT NULL,
`return` INT(11) NULL DEFAULT NULL,
`return_sum_price` VARCHAR(50) NULL DEFAULT NULL,
`stock` VARCHAR(50) NULL DEFAULT NULL,
`source_file` VARCHAR(50) NULL DEFAULT NULL,
`from` DATE NULL DEFAULT NULL,
`end` DATE NULL DEFAULT NULL,
`clear_article` VARCHAR(50) NULL DEFAULT NULL,
`user_id` INT(11) NULL DEFAULT NULL,
`file_hash` VARCHAR(50) NULL DEFAULT 'sha1(concat(user_id, source_file))',
PRIMARY KEY (`id`),
INDEX `from` (`from`),
INDEX `end` (`end`),
INDEX `size_color_clear_article` (`size`, `color`, `clear_article`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
查询是:
SELECT wildberries.clear_article AS clear_article, wildberries.color AS color, wildberries.size AS size, (
SELECT w2.stock
FROM wildberries w2
WHERE w2.clear_article = wildberries.clear_article AND w2.color = wildberries.color AND w2.size = wildberries.size
ORDER BY w2.from DESC
LIMIT 1) AS stock
FROM wildberries
GROUP BY clear_article , color, size
ORDER BY `from` DESC
此查询为我提供了正确的值(最新产品日期的库存)。
但是这个查询太慢了。我试图添加索引 - 没有结果。
主要思想是:对于每种产品(与clear_article,尺寸和颜色相结合)获取最新的“来自”并获得“库存”。
有人可以给我建议 - 是否可以在没有子查询的情况下重写此查询?
更新:样本数据在桌面上。
答案 0 :(得分:0)
为什么要在同一个表格中进行子选择,如果您首先检索已经存在的值? 您所拥有的简化版
SELECT clear_article, color, size, stock
FROM wildberries
ORDER BY wildberries.from DESC