ms-sql query 질문입니다.
2010.09.24 11:02
이번에 플젝을 하나 받았는데... 빡세네요 -_-
ms-sql 구문을 하나 구성하려는데 조건이
'해당일자의 전 일자로 최근일자'를 가져오는겁니다.
예를 들어 데이터가
2010-10-01
2010-09-01
2010-08-01
2010-07-01
뭐 이렇게 있는데 (각 레코드는 다수입니다. 그러니까 2010-10-01 이란 값으로 레코드가 여러개 있다는 말)
검색조건으로 2010-08-20을 입력하게 되면 최근의 전일자로 해서 2010-08-01의 레코드를 다 들고 오는건데요.
최근 검색조건으로 top 1 뭐 이렇게 들고오는걸 해봤는데, 이건 아닌거 같더라구요.
어떻게 하면 구문이 만들어질지를 짐작도 못하겠습니다;
도움 부탁드립니다.
코멘트 4
-
조일권
09.24 12:01
-
김강욱
09.24 19:05
아마 말씀이,
2010-10-01
2010-09-01
2010-08-05
2010-08-01
2010-07-01
있다면, 2010-08-05 일자 데이타를 모두 들고 오고 싶다는 얘기같으심미다.
2010-08-01 는 빼고~~~
검색일보다 작은 "가장 큰 날짜"로 SELECT 하고 싶다는 얘기 같으신데, 단순하게는 되는데, 훌륭한 쿼리인지는 ... 잘 .... 속도 문제도 있공 ...
-
조일권
09.24 21:32
김강욱님 말씀처럼 그런 쿼리라면
declare @임시날짜 char(10)
select top 1 @임시날짜 = 날짜 from table where 날짜 < '2010-08-20'
select 날짜 from table where 날짜 = @임시날짜
가 되겠네요.
-
김강욱
09.25 14:36
아마 top 1 구문에 order by 날짜 desc 가 필요할텐데, 이 table 안에 몇 건이 있는지, 인덱스가 있는지에 따라 쓸 수 있는 쿼린지 아닌지가 결정될 듯하네요.
@임시날짜대로 가져오는 건 뭐 절대시간이 있다치더라도 말입니다.
2010-06-01 ( 여러개 레코드를 가지고 있음)
2010-07-01 ( 이것도 ... )
2010-08-01 ( 이것도 ... )
2010-08-20 ( 이것도 ... )
즉 2010-08-20 검색 조건이 되면 08-01, 07-01 , 06-01 데이타를 다 가지고 와야 되는건가요?
아니면 08 월 데이타만 가지고 와야 되는건가요?
설마 그럴일은 없겠지만.... Where 날짜 < '2010-08-20' 하면 죄다 가지고 올꺼고...
만약 8월 만의 데이타가 필요하다면
프로그램 내부에서 검색 월만 추출해서 2010-08-01 만들어서
where 날짜 >= '2010-08-01' and 날짜 < '2010-08-20'
이렇게 하면 될듯 한데.. ^^;;