2013-06-19 116 views
1

目前我的查詢是將數據從當前日期提取到過去7天。我想從上週獲取數據。平均值如果今天是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」,以確保您獲得一致的結果,而不管登錄是什麼。 –