각 품목별 최종 단가표를 쿼리로 만들려고 합니다.
조건은..
1. 구분이 매출인 레코드중
2. 각 품목별로
3. 가장 최근 날짜 기준으로
4. 단가와 날짜를 구하는것입니다.
예제는 다음과 같습니다.
seq | 구분 | 날짜 | 품목 | 수량 | 단가 |
1 | 매출 | 2015.02.13 | 품목1 | 1 | 100 |
2 | 매출 | 2015.02.13 | 품목2 | 2 | 150 |
3 | 매입 | 2015.02.13 | 품목3 | 5 | 200 |
4 | 매출 | 2015.02.13 | 품목3 | 3 | 300 |
5 | 매출 | 2015.02.11 | 품목2 | 1 | 100 |
6 | 매출 | 2015.02.12 | 품목2 | 2 | 200 |
결과값 예제는 다음과 같습니다.
품목 | 단가 | 날짜 |
품목1 | 100 | 2015.02.13 |
품목2 | 150 | 2015.02.13 |
품목3 | 300 | 2015.02.13 |
쿼리를 어떻게 만들어야 할까요?
Comment 3
-
이리
2015.02.16 14:49
-
뇽이
2015.02.16 15:59
아...이리님이 말씀하신 현상이 발생됩니다. 같은 날짜에 두번 세번 발생되는 경우도 있습니다.
이때는 SEQ를 기준으로 가장 마지막값이 들어가야 합니다.
그리고...DB가 MSSQL 2005 이상이라면 참 좋을텐데..
MDB에서도 작동이 되어야 해서 MS SQL의 ROW_NUMBER말고 표준 쿼리로 구현하려면 복잡하겠죠?
-
항해자™
2015.02.17 02:22
select *
from ( select cDate, cProduct, max(cSeqNo) as cSeqNo from dbo.tSales where cGroup = '매출' group by cDate, cProduct ) as a
join dbo.tSales as b on b.cSeqNo = a.cSeqNo
같은 날짜에 단가가 2번 들어오지는 않겠죠?
2005버전 이상이라면 ROW_NUMBER()를 이용하는 방법은 어떨까요
WITH 테이블
AS
(
SELECT 1 AS seq, '매출' AS 구분, '2015.02.13' AS 날짜, '품목1' AS 품목, 1 AS 수량, 100 AS 단가
UNION ALL
SELECT 2, '매출', '2015.02.13', '품목2', 2, 150
UNION ALL
SELECT 3, '매입', '2015.02.13', '품목3', 5, 200
UNION ALL
SELECT 4, '매출', '2015.02.13', '품목3', 3, 300
UNION ALL
SELECT 5, '매출', '2015.02.11', '품목2', 1, 100
UNION ALL
SELECT 6, '매출', '2015.02.12', '품목2', 2, 200
)
(
SELECT A.품목
, A.단가
, A.날짜
FROM
(
SELECT 품목
, 단가
, 날짜
, ROW_NUMBER() OVER(PARTITION BY 품목 ORDER BY 날짜 DESC ) AS RowNum
FROM 테이블
WHERE 구분 = '매출'
) AS A
WHERE A.RowNum = 1
)