문제

다음과 같은 상황이 있습니다.

표 : 재밌는

ItemKey     ItemName     ItemPriceEffectiveDate    ItemPrice
11          ItemA        6/6/2009                  $500
12          ItemA        6/15/2009                 $550
13          ItemA        9/9/2009                  $450
14          ItemB        3/9/2009                  $150
15          ItemB        9/9/2009                  $350

다음을 수행해야합니다.

Select
  ItemName as ItemDescription,
  (SELECT THE PRICE WITH THE LATEST EFFECTIVE DATE FROM TODAY THROUGH THE PAST)
FROM
  FunTable
GROUP BY
  ItemName

출력은 다음과 같아야합니다.

ItemA $550
ItemB $150

따라서 가격의 효과적인 날짜는 5 년 전부터 5 년부터 5 년까지 다양합니다. 오늘 또는 과거에 효과적인 가격을 선택하고 싶습니다 (미래는 아님! 아직 효과적이지 않습니다). "가장 최근의"유효 가격이어야합니다.

이견있는 사람?

도움이 되었습니까?

해결책

이런 것 (이름은 없지만 아이디어를 얻습니다) ...

WITH A (Row, Price) AS
(
  SELECT Row_Number() OVER (PARTITION BY Item ORDER BY Effective DESC) AS [RN],
         Price FROM Table2
  WHERE Effective <= GETDATE()
)
SELECT * FROM A WHERE A.Row = 1

다른 팁

select ft.ItemName,
       price
from   (select   ItemName,
                 Max(ItemPriceEffectiveDate) as MaxEff
        from     FunTable
        where    ItemPriceEffectiveDate <= GETDATE()
        group by ItemName) as d,
       FunTable as ft
where  d.MaxEff = ft.ItemPriceEffectiveDate; 

편집 : 가격이 하루에 한 번 이상 변경되지 않는다고 가정하면 쿼리를 실제로 작동하도록 변경했습니다.

나는 내 머리 꼭대기에 대한 답을 모르지만 내 추측은 당신이 하위 쿼리를 사용해야한다는 것을 의미한다는 것을 의미합니다.

사용 코드에서 모든 데이터를 가져와 직접 처리하는 것이 더 쉬울 수 있습니다.

당신이 할 경우 작동해야합니다

SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top