2010-05-06 3 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 |  | 
+-------------------+---------------------+------+-----+---------+-------+ 

). 내가 별도로합니다 (ItemID의 별도 항목 테이블에 저장됩니다) 모든 항목에 대한 마지막 판매 가격을하고 삽입 할 수 있도록하려면, 그러나

SELECT price FROM saledata WHERE itemID = 1234 AND storeID = 111 ORDER BY saledate DESC LIMIT 1 

: 나는 같은 쿼리를 실행할 수있어 표. 어떻게이 데이터를 얻을 수 있습니까? 다음과 같은 쿼리를 시도했습니다 :

SELECT storeID, itemID, price FROM saledata WHERE itemID IN (SELECT itemID from itemmap) ORDER BY saledate DESC LIMIT 1 

그런 다음 삽입하여 해당 데이터를 가져 오지 못했습니다. 이 스택 오버플로에 자주 오는 큰-N-그룹 별 문제가

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

관련 문제