2013-06-19 3 views
1

현재 내 쿼리가 현재 날짜에서 지난 7 일 동안 데이터를 가져옵니다. 지난 주 데이터 가져 오기 .Means 오늘 날짜가 2013-06-20 인 경우 데이터를 가져와야합니다. 지난 주 (2013-06-10 ~ 2013-06-16). 정확한 답변을 찾기 위해 많은 포럼을 찾았지만 여전히 찾을 수 없습니다.지난 주 SQL에서 데이터를 가져 오는 방법

여기에 다음 코드는 이전 주 월요일을 반환해야 내 쿼리

SELECT CONVERT(varchar(25),PostDate,107) AS duration, count(*) AS posts 
    FROM MDBDetails WHERE 
     DateAdd(dd, 0, DateDiff(dd, 0, PostDate)) <= DateAdd(dd, 0, DateDiff(dd, 0, GETDATE())) AND 
     DateAdd(dd, 0, DateDiff(dd, 0, PostDate)) >= DateAdd(dd, 0, DateDiff(dd, 0, GETDATE())) - 7 

      GROUP BY CONVERT(varchar(25),PostDate,107) 
      ORDER BY duration 
+2

당신이이 DB를하는 우리에게 얘기를해야합니다. sql에는 실제 표준 날짜/시간 함수가 없으므로 모든 DB가 자체적으로 구현합니다. –

+0

7 일 전에 데이터를 가져와야한다는 의미입니까? –

+0

@MarcB : 사실 날짜 처리에는 표준이 있습니다. 'interval' 데이터 유형을 사용하여 예를 들어 :'where postdate <= current_date - interval '7'day'은 ANSI SQL이 될 것이고 실제로 다양한 DBMS에서 이해할 수 있습니다. –

답변

3

사용 DATEDIFF (주)

SELECT CONVERT(varchar(25),PostDate,107) AS duration, count(*) AS posts 
FROM MDBDetails 
WHERE DATEDIFF(week, PostDate,GETDATE()) = 1 
GROUP BY CONVERT(varchar(25),PostDate,107) 
ORDER BY duration 
+0

고마워요. 내가 필요로하는 것. .. 고맙다. – user2502561

1

입니다.

SELECT DATEADD(WEEK, -1, DATEADD(WEEK, DATEDIFF(WEEK, 0, SYSDATETIME()), 0)); 
+0

실제로 이것은 지난 월요일에 반환됩니다. 가져 오는 방법 지난 월요일부터 일요일까지의 데이터 SQL 쿼리에서 자세히 설명하지 마십시오. – user2502561

+0

위의 쿼리에서 반환되는 날짜에 6 일을 추가하면되지만 다른 대답이 더 좋을 것으로 생각됩니다. jpw에서 제공하는 답변을 사용해보십시오. – JodyT

1

datepart 함수를 사용하면 주 번호를 얻을 수 있습니다. 1을 빼면 이전 주에 있습니다.

SELECT DATEPART(WEEK,GETDATE()) -1 

그런 다음 예를 들어 주 번호와 연도를 사용하여 데이터를 필터링 할 수 있습니다.

+1

이것은 언어에 따라 다릅니다. 언어가 스페인어로 설정된 로그인이있는 경우 쿼리를 실행 한 날짜에 따라 결과가 달라질 수 있습니다. 이 코드를 실행하기 전에 "Set DATEFIRST 7"을 포함시켜야 로그인에 관계없이 일관된 결과를 얻을 수 있습니다. –

관련 문제