2013-10-14 2 views
0
SELECT * 

FROM 
    [Test].[dbo].[Tickets] 

INNER JOIN 
    [Test].[dbo].[Movies] 

ON 
    [Test].[dbo].[Tickets].[ConnectedTo] = [Test].[dbo].[Movies].[MovieID] 

WHERE 
    [Test].[dbo].[Movies].[Moviename] like '%K%' 
    AND [Test].[dbo].[Tickets].[DateEntered]= DATEADD(month, -1, GETDATE()) 

DateEntered 열을 기반으로 지난 달의 모든 티켓을 항상 반환하는 저장 프로 시저를 만들려고합니다. 이 줄은 그러나 이제까지 그러나 데이터를 반환하지 않는 것 :SQL 전월의 모든 결과 가져 오기

[Test].[dbo].[Tickets].[DateEntered]= DATEADD(month, -1, GETDATE()) 

나는 그 뒤에 논리는, 현재 날짜를 잡아 전월으로 변경하고 해당 날짜를 비교합니다하는 방식 올바른 생각 DateEntered와 함께, 내가 여기서 착각 할 수는 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

답변

2

딱 한 달 전에 현재 조건 (밀리 초 단위) 만 DateEntered가 정확히 행을 보일 것이다 >=

[Test].[dbo].[Tickets].[DateEntered] >= DATEADD(month, -1, GETDATE()) 

= 교체 :

+0

왜 '='가 작동하지 않습니까? – Christos

+0

아, 나는 어리석은 것이라고 생각했습니다! 고마워요. Nenad. – JimmyK

0

을 잘 모르겠어요 경우 선택한 답변 이것을 달성하는 가장 좋은 방법입니다. 13 일에 보고서를 실행 한 경우 이전 달의 13 일부터 보고서가 실행 된 정확한 시간까지 모든 기록을 제공합니다.

따라서 이와 비슷한 것을 원합니다. 월이 January 인 경우 조심해야합니다. 그 이유는 이전 달과 이전 달을 원하기 때문입니다.

-- If the month is January we need to select the previous year, otherwise current year 
IF MONTH(GETDATE()) = 1 
    BEGIN 
     YEAR([DateEntered]) = YEAR(DATEADD(y, -1, GETDATE())) AND MONTH([DateEntered]) = MONTH(DATEADD(m, -1, GETDATE()) 
    END 
ELSE 
    BEGIN 
     YEAR([DateEntered]) = YEAR(GETDATE()) AND MONTH([DateEntered]) = MONTH(DATEADD(m, -1, GETDATE()) 
    END