2013-05-22 2 views
0

죄송합니다. 나는이 질문의 제목을 쓰는 방법을 모르므로 잘 설명해 드릴 수 있습니다.최신 날짜 범위에 가입하는 방법을 찾고 계십니까?

조인 또는 하위 쿼리를 사용하여 쿼리하려고하는데 무언가가 클릭되지 않습니다. 내 머리가 잠시 m m 해지고 있습니다.

그래서 항목 당 일일 판매 테이블이 있습니다.

그런 다음 품목이 판매와 관련된 날짜 범위가있는 표가 있습니다.

문제는 항목이 연결된 2-3 일의 판매 기간이 겹칠 수 있습니다. 하지만 판매가 끝나는 날짜는 결코 같지 않으며 종료일이 가장 최근 인 판매 (또는 최고 수치)는 이전 기간에 비용이 다른 경우 해당 기간 동안 해당 항목의 실제 비용을 갖게됩니다 그것은 겹쳐졌다.

그래서 이 구조가 지정된 날까지 항목 비용을 반환하려면 어떻게해야합니까?

Item sales by date 
----------- 
itemID | Sales | Date 
--------------------------- 
1   $4.00 3/29 
1   $5.00 4/1 
1   $6,00 4/3 

Sale Periods and Item Costs 
=========================== 
item ID | StartDate | EndDate | Cost In Period | PeriodID 
----------------------------------------------------------- 
1   3/27  4/2   $2.00   1 
1   4/1   4/16  $1.90   2 

당신은 판매 4/1이 관련 될 수있는이 개 비용을 가지고 나타나는 것을 볼 수있다, 나는 기간의 비용을 사용하고자하는 거라고 나중에 끝내라.

그래서 결과는

Item sales by date WITH COST 
----------- 
itemID | Sales | Date | COST 
-------------------------------- 
1   $4.00 3/29 $2.00 
1   $5.00 4/1 $1.80 
1   $6,00 4/3 $1.80 
+0

RDBMS는 무엇입니까? MySQL은? SQL Server, 오라클? – xQbert

+0

MS SQL SERVER 2005 – beauk

답변

1

검증되지 않은 것 : 단순히 두 번째 작업을 수행하는 것이 더 빠를 수 있습니다 서브 쿼리의 성능이 비록이 내 우려의 가까운

SELECT ISBD.itemID, ISBD.Sales, ISBD.Date, SPIC.Cost 
FROM ITemSalesByDate ISBD 
LEFT JOIN SalePeriodsandItemCosts SPIC 
    ON SPIC.ItemID = ISBC.ItemID 
    AND SPIC.EndDate = 
    (SELECT max(SPIC2.ENDDATE) 
    FROM SalePeriodsandItemCosts SPIC2 
    WHERE SPIC2.ItemID = ISBD.ItemID) 

하나가 될 수 있습니다 최대 항목 ID는 salesPeriods 및 ItemCosts에 가입하고 다른 값은 그룹화하십시오.

+0

하위 쿼리에서 판매 날짜 (ISBD.Date)가 SPIC2.StartDtae와 SPIC2.END 날짜 사이인지 확인해야한다는 점을 제외하고는 – beauk

1

이 SQLServer에있다 가정하면, 시도 :

with cte as 
(select s.itemID, s.Sales, s.[Date], c.[Cost in Period], 
     row_number() over (partition by s.itemID, s.[Date] 
          order by c.EndDate desc) rn 
from sales s 
join costs c 
    on s.itemID = c.[item ID] and s.Date between c.StartDate and c.EndDate) 
select itemID, Sales, [Date], [Cost in Period] 
from cte 
where rn=1 

SQLFiddle here합니다.

+0

재미 있습니다 (종류), 바로 그 후 이것을 게시, 내가 전에 [링크] (http://stackoverflow.com/questions/7002898/trying-to-pull-most-recent-pay-rate-from-table) 전에이 질문을 매우 비슷한 것으로 나타났습니다 것으로 나타났습니다 , 솔루션은이 접근법을 사용했습니다. 나는 이것을 시도해 볼 것이고, 더 빠른 지 볼 것이다. 나는 xQberts 접근 방식을 약간 시도해 보았다. 먼저 작동하는 것처럼 보였다. – beauk

+0

이것은 MS SQL Server 2005입니다. – beauk

관련 문제