У меня есть таблица всех продаж, определенная как:
mysql> describe saledata;
+-------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------------------+------+-----+---------+-------+
| SaleDate | datetime | NO | | NULL | |
| StoreID | bigint(20) unsigned | NO | | NULL | |
| Quantity | int(10) unsigned | NO | | NULL | |
| Price | decimal(19,4) | NO | | NULL | |
| ItemID | bigint(20) unsigned | NO | | NULL | |
+-------------------+---------------------+------+-----+---------+-------+
Мне нужно получить последнюю продажную цену для всех предметов (так как цена может измениться). Я знаю, что могу выполнить запрос как:
SELECT price FROM saledata WHERE itemID = 1234 AND storeID = 111 ORDER BY saledate DESC LIMIT 1
Однако я хочу получить последнюю продажную цену для всех предметов (ItemID
хранятся в отдельной таблице предметов) и вставить их в отдельную таблицу. Как я могу получить эти данные? Я пробовал такие запросы:
SELECT storeID, itemID, price FROM saledata WHERE itemID IN (SELECT itemID from itemmap) ORDER BY saledate DESC LIMIT 1
и затем оберните это во вставку, но она не получает правильные данные. Можно ли выполнить один запрос, чтобы получить последнюю цену для каждого элемента и вставить ее в таблицу, определенную как:
mysql> describe lastsale;
+-------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------------------+------+-----+---------+-------+
| StoreID | bigint(20) unsigned | NO | | NULL | |
| Price | decimal(19,4) | NO | | NULL | |
| ItemID | bigint(20) unsigned | NO | | NULL | |
+-------------------+---------------------+------+-----+---------+-------+