2016-09-12 3 views
1

내 데이터베이스에는 날짜를 기준으로 회계 연도, 기간 등 (SQLAssistant로 Teradata 사용)을 제공하는 달력 테이블이 있습니다. 작년의 데이터를 SQL 쿼리에서 얻으 려하고 있는데 where where 절에 -1을 추가하는 것만 큼 단순하다고 생각했지만 작동하지 않습니다. 회계 연도가 변경 될 때 쿼리를 업데이트하는 것을 기억하고 싶지 않기 때문에 날짜를 하드 코딩하고 싶지 않습니다.달력 테이블에서 작년 회계 연도 데이터 찾기 SQL

작동하고 찾아온다 판매 데이터를 모든 회계 연도에 대한

단순화 쿼리

Select s.sales, c.fiscalPeriod, c.fiscalYear 
from sales s 
join calendar c 
on s.salesDate = c.calDate 

내가 무엇을 시도했다, 그러나 데이터 다시 데려되지 것 :

Select s.sales, c.fiscalPeriod, c.fiscalYear 
from sales s 
join calendar c 
on s.salesDate = c.calDate 
where c.fiscalYear=c.fiscalYear-1 

그리고이 :

Select s.sales, c.fiscalPeriod, c.fiscalYear, c.fiscalYear-1 AS lastYear 
from sales s 
join calendar c 
on s.salesDate = c.calDate 
where c.fiscalYear=lastYear 

분명히 알 수 있듯이 저는 SQL을 처음 접했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

나는 Teradata를 모르지만 필요한 것은 현재 날짜를 반환하는 함수입니다. 열 자체를 비교하는 것은 말이되지 않습니다. – shawnt00

+0

우리 회계 연도는 달력 연도 (3 월 -2 월)를 기준으로하지 않습니다. 따라서 현재 날짜를 빼고 회계 연도로 설정하는 데 1 년을 빼면 정확한 시간 부분이 아닙니다. 아니면 현재 날짜를 다른 방법으로 사용 하시겠습니까? – smms

+0

확인. 아직도 현재 날짜가 필요합니다. 이를 사용하여 회계 연도를 결정하는 당월을 얻으십시오. 예 : '년 (현재 날짜) - 1에서 9 사이의 경우 (현재 날짜), 그 다음 1 else 0 end' – shawnt00

답변

0

지난 회계 연도 데이터 만 얻으려면 fiscalyear를 where 절에서 상수로 설정하는 것이 가장 좋습니다. 예를 들어

:

많은 날짜을 바꾸기 기능을 이용한, 그들에 대한 검색이 있습니다
to_char(fiscalYear,'yyyy')='2015' 

, 그들이 편리합니다.

+0

1 년 동안 하드 코딩을하고 싶지 않았으므로 나중에 업데이트 할 필요가 없었습니다. 이를 반영하기 위해 초기 질문을 업데이트 할 것입니다. 고맙습니다 – smms

0

당신의 회계 연도는 그 해의 월 1 찾을 TRUNC를 사용하여 다음 오늘부터 두 달 빼기 3 월에 시작하는 경우 : add_months을 적용 후

trunc(add_months(calendar_date,-2), 'y') 

을 그리고 :

Select s.sales, c.fiscalPeriod, c.fiscalYear 
from sales s 
join calendar c 
on s.salesDate = c.calDate 
where c.calDate between add_months(trunc(add_months(current_date,-2), 'y'), -10) 
        and add_months(trunc(add_months(current_date,-2), 'y'), 2)-1 
0

을 나는 희망 귀하의 질문을 오해하지 않았지만 달력 테이블이 현재 날짜까지 채워지면이 쿼리를 사용할 수 있습니다.

Select s.sales, c_lastyear.fiscalPeriod, c_lastyear.fiscalYear 
    from sales s 
     join calendar c_lastyear 
      on s.salesDate = c_lastyear.calDate 
     join calendar c 
      on c_lastyear.fiscalYear=c.fiscalYear-1 
    where c.calDate= current_date 

단계는 다음과 같습니다

  1. 가 현재 날짜 (별칭 C)

  2. 이의 모든 날짜를 얻을 수와 달력 테이블에 액세스하여 현재 회계 연도 발견 전년도 (별명 c_lastearear)

  3. 은 (별칭 )

(성능이 다른 제안으로 좋지 않을 것이다, 그러나이 쿼리에 대한 가정을하지 않는 이전 회계 연도의 모든 판매를 얻을 귀하의 회계 연도의 실제 정의)

관련 문제