5개컬럼이 pk인 상황에서 3개 컬럼값이 주어졌습니다. 나머지 2개 컬럼이 순차적으로 가장 큰 값을 찾아야하는데 방법을 알려주세요! 0 5 4,874

by 초보 [SQLServer] [2024.04.12 01:41:48]


안녕하십니까? 

sql server사용해야하는데요. 

a,b,c,d,e,f,g,h컬럼이 있는 상황에서 a,b,c,d,e가 pk 입니다. a,b,c는 고정값이고 d,e가 자동으로 번호가 부여되는데 

가장 최신 데이터를 찾아서 장표로 출력을 해야합니다. 아래에서 E가 나와야합니다.

('a1', 'cd1', '1', '1','1', 'A')
('a1', 'cd1', '1', '1','2', 'B')
('a1', 'cd1', '1', '2','1', 'C')
('a1', 'cd1', '1', '2','2', 'D')
('a1', 'cd1', '1', '2','3', 'E')

아래처럼 하면 원하는 값을 찾을수있긴 한데 장표테이블이여서 컬럼수도 많고 한데 이방법으로 해도 될지 의문 입니다.

①과②가 속도면에서 차이가 있나요?

① select a,b,c,d,e,f,g,h 
   from testTable
   where (a+b+c+d+e) in
   ( select a+b+c+max(d+e) from testTable
     group by a,b,c )

② select a,b,c,d,e,f,g,h 
   from testTable
   inner join 
    ( select a, b, c, max(d+e) as de from testTable
      group by a, b, c ) as T2
   on  testTable.a = T2.a 
   and testTable.b = T2.b
   and testTable.c = T2.c
   and testTable.d+testTable.e  = T2.de
by 마농 [2024.04.12 08:26:48]

d, e 가 자료형이 숫자인가요? 문자인가요?
- 따옴표를 붙여 놔서 문자('1')로 보이는데? 숫자(1)일 것 같은 느낌이 드네요.
- 숫자라면 문제 없는데. 진짜 문자라면 고려할 사항이 많습니다.
- 문자의 경우 고정길이(1자리) 인지? 가변길이 인지?
- 고정길이라면 문제 없는데. 가변길이라면 '10' 보다 '9' 를 크게 인지하는 오류가 있습니다.


by 초보 [2024.04.12 12:26:57]

답변감사합니다. 둘다 문자여서 말씀하신대로 길이 문제도 있고 단순이 연결해서 될 문제가 아니란걸 알게됐습니다.  감사합니다!


by 초보 [2024.04.13 22:55:17]

아래처럼 하면 원하는 값이 나오는데 고려할 사항이 더 있으면 조언 부탁드립니다!

select a,b,c,d,e,f,g,h

from

  ( select *,

        rank()over(partition by a, b, c order by d desc,e desc) as No

     from testTable ) as T2

where T2.No =1

 


by 마농 [2024.04.14 18:32:36]

잘하셨습니다.

Rank 보다는 Row_number 가 더 적절합니다.

가변길이 문자에 저장된 수치 데이터라면?

그에 대한 처리가 필요합니다.

ROW_NUMBER() OVER(PARTITION BY a, b, c ORDER BY LEN(d) DESC, d DESC, LEN(e) DESC, e DESC) rn


by 초보 [2024.04.15 04:09:48]

감사합니다! 가변길이에대한 접근방법을 생각도 못했었는데 감사합니다!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입