2010-05-06 1 views
4

У меня есть таблица всех продаж определяется как:SQL запрос, чтобы получить последнюю запись для всех различных элементов в таблице

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 s хранятся в отдельной таблице элементов) и вставить их в отдельный Таблица. Как я могу получить эти данные? Я пробовал запросы как это:

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 |  | 
+-------------------+---------------------+------+-----+---------+-------+ 

ответ

4

Это проблема величайшая-н-за группу, которая приходит часто на переполнение стека.

INSERT INTO lastsale (StoreID, Price, ItemID) 
    SELECT s1.StoreID, s1.Price, s1.ItemID 
    FROM saledata s1 
    LEFT OUTER JOIN saledata s2 
    ON (s1.Itemid = s2.Itemid AND s1.SaleDate < s2.SaleDate) 
    WHERE s2.ItemID IS NULL; 
+0

С помощью stackoverflow своевременно найдено – sansknwoledge