2012-11-07 11 views
25

テーブルに何百万もの行があるので、現在の日付から週のデータ(正確には過去7日間のデータ)を最も速く選択する方法。私はsqlテーブルにcreated_dateのタイムスタンプを持っています。今日の日付から最近1週間のデータを選択する方法

私が試してみましたが、この

SELECT Created_Date 
FROM Table_Name 
WHERE Created_Date >= DATEADD(day,-7, GETDATE()) 

Iした2つの質問:

  1. は、このクエリは正しいですか?
  2. これは、数百万行のテーブルから最後の7日間のデータを取得する最も速い方法ですか?

答えて

12

はい、構文は正確であり、正常であるはずです。ここで

は、私はあなたの特定のケースのために作成 SQL Fiddle Demo

3
  1. クエリが正しい

2Aです。最後の7日間は、全体のテーブルよりもはるかに少ない行を持ち、インデックスは助けることができます

2B。あなただけCreated_Dateに興味があるなら、あなたはによっていくつかのグループを使用して試してみて、数えることができる、それが現在のレコードを選択するために、最後の7日間

WHERE Created_Date >= DATEADD(day, -7, GETDATE()) 

のレコードを選択するために、結果セットのサイズ

3

に役立つはずですあなたは先週のレコードを選択したい場合は代わりに、最後の7日の週

SET DATEFIRST 1 -- Define beginning of week as Monday 
SELECT * FROM 
WHERE CreatedDate >= DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT(DATE, GETDATE())) 
    AND CreatedDate < DATEADD(day, 8 - DATEPART(dw, GETDATE()), CONVERT(DATE, GETDATE())) 

SET DATEFIRST 1 -- Define beginning of week as Monday 
SELECT * FROM 
WHERE CreatedDate >= DATEADD(day, -(DATEPART(dw, GETDATE()) + 6), CONVERT(DATE, GETDATE())) 
    AND CreatedDate < DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT(DATE, GETDATE())) 
関連する問題