SQL 질문과 답변 게시판
Microsoft SQL Server와 관련된 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
글 수 5,150
Data 가 아래처럼 존재합니다.'
|
PackBcn |
BatchCode |
CellVtg |
CellIr |
Model |
Line |
Judgement |
TransDate |
|
|
A |
001 |
1 |
1 |
K5 |
S1 |
OK |
2010-09-10 09:00 |
|
|
A |
001 |
2 |
2 |
K5 |
S2 |
OK |
2010-09-10 10:00 |
|
|
B |
002 |
3 |
3 |
K5 |
S1 |
OK |
2010-09-10 08:00 |
|
|
B |
002 |
4 |
4 |
K5 |
S2 |
OK |
2010-09-10 09:00 |
|
|
C |
003 |
5 |
5 |
K5 |
S1 |
OK |
2010-09-10 11:00 |
|
|
C |
003 |
6 |
6 |
K5 |
S2 |
OK |
2010-09-10 12:00 |
|
|
D |
004 |
7 |
7 |
K5 |
S1 |
OK |
2010-09-10 13:00 |
|
|
D |
004 |
8 |
8 |
K5 |
S2 |
OK |
2010-09-10 14:00 |
여기서 제가 하고 싶은것은 PackBcn이 중복되었을 경우 TransDate(날짜)가 최근인 값만 가져오고 싶습니다.
어떻게 해야 하는것인지요...?
즉, 아래의 표와 같이 값을 조회하고 싶은데 잘 안되네요~ 좋은 방법을 알고 계신 고수분들의 조언을 부탁드립니다..
|
PackBcn |
BatchCode |
CellVtg |
CellIr |
Model |
Line |
Judgement |
TransDate |
|
A |
001 |
2 |
2 |
K5 |
S2 |
OK |
2010-09-10 10:00 |
|
B |
002 |
4 |
4 |
K5 |
S2 |
OK |
2010-09-10 09:00 |
|
C |
003 |
6 |
6 |
K5 |
S2 |
OK |
2010-09-10 12:00 |
|
D |
004 |
8 |
8 |
K5 |
S2 |
OK |
2010-09-10 14:00 |
2010.09.13 11:34:21 (*.97.37.231)
with t as (
select 'A' PackBcn, '001' BatchCode, '1' CellVtg, '1' CellIr, 'K5' Models, 'S1' Lines, 'OK' Judgement, '2010-09-10 09:00' TransDate union all
select 'A', '001', '2', '2', 'K5', 'S2', 'OK', '2010-09-10 10:00' union all
select 'B', '002', '3', '3', 'K5', 'S1', 'OK', '2010-09-10 08:00' union all
select 'B', '002', '4', '4', 'K5', 'S2', 'OK', '2010-09-10 09:00' union all
select 'C', '003', '5', '5', 'K5', 'S1', 'OK', '2010-09-10 11:00' union all
select 'C', '003', '6', '6', 'K5', 'S2', 'OK', '2010-09-10 12:00' union all
select 'D', '004', '7', '7', 'K5', 'S1', 'OK', '2010-09-10 13:00' union all
select 'D', '004', '8', '8', 'K5', 'S2', 'OK', '2010-09-10 14:00' )
select PackBcn
, BatchCode
, CellVtg
, CellIr
, Models
, Lines
, Judgement
, TransDate
from (
select PackBcn
, BatchCode
, CellVtg
, CellIr
, Models
, Lines
, Judgement
, TransDate
, row_number() over(partition by PackBcn order by BatchCode desc , CellVtg desc, CellIr desc, TransDate desc) rn
from t
)
where rn = 1
order by 1
select 'A' PackBcn, '001' BatchCode, '1' CellVtg, '1' CellIr, 'K5' Models, 'S1' Lines, 'OK' Judgement, '2010-09-10 09:00' TransDate union all
select 'A', '001', '2', '2', 'K5', 'S2', 'OK', '2010-09-10 10:00' union all
select 'B', '002', '3', '3', 'K5', 'S1', 'OK', '2010-09-10 08:00' union all
select 'B', '002', '4', '4', 'K5', 'S2', 'OK', '2010-09-10 09:00' union all
select 'C', '003', '5', '5', 'K5', 'S1', 'OK', '2010-09-10 11:00' union all
select 'C', '003', '6', '6', 'K5', 'S2', 'OK', '2010-09-10 12:00' union all
select 'D', '004', '7', '7', 'K5', 'S1', 'OK', '2010-09-10 13:00' union all
select 'D', '004', '8', '8', 'K5', 'S2', 'OK', '2010-09-10 14:00' )
select PackBcn
, BatchCode
, CellVtg
, CellIr
, Models
, Lines
, Judgement
, TransDate
from (
select PackBcn
, BatchCode
, CellVtg
, CellIr
, Models
, Lines
, Judgement
, TransDate
, row_number() over(partition by PackBcn order by BatchCode desc , CellVtg desc, CellIr desc, TransDate desc) rn
from t
)
where rn = 1
order by 1


버젼2005이상일때와 아닐때의 차이가 있습니다.
편하게 2005이상 기준일때...
row_number() over (partition by PackBcn order by PackBcn , TransDate desc ) idx
구하신 다음 idx = 1 인것만 구하셔도 될듯 합니다.