mssql로 조건 데이터 찾기 질문드립니다.. 0 3 1,226

by 휘인 [SQL Query] mssql sql DB [2021.07.01 09:31:29]


mssql

테이블명 printer

print_ym(계약갱신년월) black color
202107 400 8
202006 200 8
202005 100 6

이렇게 있다고 할 때

DB에서 변수 ls_stock은 조회하려는 년월입니다

조회하려는 년월에 맞게 데이터를 검색하고싶은데 어떻게 해야할까요?

print_ym이 들어가도록 새로 변수를 넣어야 하나요..? 너무 어렵네요

 

(ex. 19년 8월 조회할 때는 print_ym이 202005인 자료가 나오고, 20년 9월 조회할 때는 202006인 자료가 나오게요)

도와주세요ㅠㅠ

by 마농 [2021.07.01 10:03:37]

조건이 애매하네요.
이퀄 조건은 아닌 듯 하고
조회 당시 유효한 조건? 이전 년월 중 마지막 년월? 이라면 말이 되는데.
예를 들어 주신거로 보면 유효한 년월이 아닌 가까운 년월을 찾는 듯 하네요?
이건 논리적으로 말이 안되는 조건이긴 한데요.
이런 억지 조건보다는 위에 언급한 유효한 조건을 찾는게 맞지 않을까 생각됩니다.
억지로라도 가까운 조건을 찾고자 한다면?
문제 되는게 또 가까운 정도가 같은게 2건이 나오는 경우엔 어땋게 해야 할지도 정해야 합니다.
예를 들면 테이블에 202101 과 202103 이 있는데 202102 로 조회시 둘 중 어떤게 나오는게 맞는지?


by 휘인 [2021.07.01 10:23:36]

그럴 때는 202101 자료가 나와야 합니다 !
202005 이전의 날짜만 202005 데이터가 나오고
나머지는 print_ym(갱신년월) 이후의 데이터가 나오면 됩니다..ㅠㅠ

(예. 20년 9월에 조회 -> 202006 , 21년 7월 -> 202107)


by 마농 [2021.07.01 10:47:17]
WITH printer AS
(
SELECT '202107' print_ym, 400 black, 8 color
UNION ALL SELECT '202006', 200, 8
UNION ALL SELECT '202005', 100, 6
)
SELECT *
  FROM printer
 WHERE print_ym = (SELECT ISNULL(MAX(CASE WHEN print_ym <= '201908' THEN print_ym END), MIN(print_ym)) FROM printer)
;

 

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