Ich habe eine MySQL-Abfrage mit der Unterabfrage.
SQL fiddleMysql Unterabfrage Optimierung mit Gruppe von
Die Tabellenstruktur ist:
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;
Frage ist:
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
Diese Abfrage gibt mir den richtigen Wert (Lager für das neueste Produkt Datum).
Aber diese Abfrage ist zu langsam. Ich habe versucht, Indizes hinzuzufügen - keine Ergebnisse.
Die Hauptidee ist: für jedes Produkt (Kombination mit clear_article, Größe und Farbe) erhalten neueste 'von' und bekommen 'Lager' für sie.
Kann mir jemand Rat geben - ist es möglich, diese Abfrage ohne die Unterabfrage neu zu schreiben?
Aktualisiert: Beispieldaten sind auf dem Tisch.
nicht Link olny verwenden .. auch mit Probe und erwarteten Ergebnis fügen Sie Text – scaisEdge
es keine Daten gibt, so würde ich nicht viel von einem Ergebnis erwarten :-(Und es gibt wirklich keinen Grund, irrelevante Spalten in der Beispieltabellenstruktur einzuschließen. – Strawberry
Warum die Unterabfrage auswählen? – abr