SQL 구문 - 그룹 별 그룹… 사용자 정의 집계 기능?
-
10-07-2019 - |
문제
다음과 같은 상황이 있습니다.
표 : 재밌는
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
제휴하지 않습니다 StackOverflow