2013-03-05 2 views
-1

두 특정 날짜 (예 : 1/15/2013 - 2/03/2013) 사이에서 대여 한 사람들이 있습니다. 내가해야 할 일은 매월 얼마나 많은 Active Rentals에 대한 'Active'보고서를 보여주는 것입니다. 예를 들어, 이것은 1 월 조사 및 2 월 조사에 나타날 것입니다.특정 달의 활동에 대한 SQL 쿼리

이 문제에 대한 도움을 주시면 감사하겠습니다. 나는 비슷한 것을 찾았지만 아무것도 발견하지 못했습니다. SQL에 내 지식은 주로 간단한 추가/변경/삭제 코드입니다.

+2

어떤 RDBMS를 사용하고 있습니까? – Taryn

+0

한 달 동안 활성 상태를 어떻게 정의합니까? 귀하의 사례는 1 월과 2 월 모두 활동적입니까? –

+0

SQL 2008을 사용하고 있습니다. 죄송합니다. 처음으로 여기에 게시합니다. 나의 예에서는 1 월과 2 월에 활동적이다. 나는 임시 테이블을 사용하려고 시도했지만 매월 30 일간을 시작하기 시작하는 방법을 알지 못했습니다 ... –

답변

0

두 날짜 사이에 "활성"레코드를 찾을 수있는 일반적인 방법

... 
WHERE startDate <= @periodEnd AND endDate >= @periodStart 
+0

일반적인 방법을 이해할 수 있지만 2013 년 1 월의 결과를 얻으려면 - -12, 2013/02 - 10, 2013/03 - 13 .... 등, 매월 하드 코딩해야합니까? –

2
SELECT * FROM `rentals` WHERE `date` BETWEEN '2013-03-04' AND '2013-04-04' 

은 분명히 자신과 테이블 이름과 열 이름을 대체 할 것 ... 이것은 당신을 한게, MySQL은입니다 게시 할 때 사용중인 DB 소프트웨어를 지정하지 않았습니다.

+0

SQL 2008을 사용하고 있습니다. 죄송합니다. 예를 들어 월별 보고서가 필요합니다. 두 달 동안의 활동이 계산되어야합니다. –

0

매달 액티비티를 찾으려면 월 목록으로 시작한 다음 액티비티 레코드와 비교해야합니다. 각 달에 시작이 있다고 가정합시다.

select months.yyyymm, count(*) as NumActives 
from (select distinct to_char(startdate, 'yyyy-mm') as yyyymm 
     from activity 
    ) as months join 
    activity a 
    on yyyymm between to_char(a.startdate, 'yyyy-mm') and to_char(a.enddate, 'yyyy-mm') 
group by months.yyyymm 

나는 일년 개월 표현으로 날짜를 변환하기 위해 오라클/포스트 그레스 기능 to_char()을 사용했다. 다른 데이터베이스에는 동일한 목표를 달성하는 다른 방법이 있습니다.