다양한 제품의 가격을 추적하는 응용 프로그램이 있습니다. 특정 제품의 가격은 하루 중 언제든지 바뀔 수 있으며 정기적으로 변경되지는 않습니다. 시간 경과에 따른 제품의 모든 가격에 대한 기록을 담은 PriceHistory 테이블이 있습니다. 응용 프로그램 사용자는 시간과 날짜를 선택하고 그 당시의 가격을 확인할 수 있습니다.주어진 DateTime 전에 가장 최근 레코드 두 개를 가져 오기위한 MySQL 쿼리
SELECT A.*
FROM `PriceHistory` A
INNER JOIN (
SELECT `BrandKey`, `LocationKey`, `ProductKey`, max(`EffectiveDateTime`) AS MaxUpdateDate
FROM `PriceHistory`
WHERE `EffectiveDateTime` <= '2010-02-22 12:00:00'
GROUP BY `BrandKey`, `LocationKey`, `ProductKey`
) AS B ON
A.`BrandKey` = B.`BrandKey`
AND A.`LocationKey` = B.`LocationKey`
AND A.`ProductKey` = B.`ProductKey`
AND A.`EffectiveDateTime` = B.MaxUpdateDate
가 지금은 그 가격이 발효 할 때 가격이 변경 얼마나 많은 사용자를 보여줄 수 있어야합니다 : 어떤 특정 날짜와 시간에 모든 제품에 대해 "현재"가격을 얻기 위해이 같은 쿼리를 사용 . 그래서 나는 단지 하나의 시간 대신에 가장 최근의 두 가지 가격을 선택해야합니다. 나는 꽤 난처한 처지이다. 몇 가지 시도했는데 내 시도 조인이 합법적이지 않기 때문에 SQL 오류가 발생했습니다. 어떤 도움을 주시면 감사하겠습니다.
나는 모든 제품을 반복 할 수 있고 가장 최근의 두 가지 가격을 얻을 수 있지만 제품 350 개와 가격 행 75,000 개에 약 10 초가 걸린다. 필자는 하나의 쿼리에서 모든 제품을 반드시 필요로하지는 않지만 각 제품에 대한 쿼리를 실행하는 것은 충분히 빠르지 않을 것입니다.
이렇게하면 두 줄만 표시됩니다. 약 350 개의 제품이 있으므로 700 개의 행이나 350 개의 넓은 행을 찾고 있습니다. 나는 조금 더 명확하게하기 위해 나의 질문을 편집했다. –