web-dev-qa-db-ja.com

今日の日付から過去1週間のデータを選択する方法

テーブルに数百万または行があるので、現在の日付から最速の方法で週データ(より正確には、過去7日間のデータ)を選択する方法。 SQLテーブルにcreated_dateのタイムスタンプがあります。

私はこれを試しました

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

2つの質問があります。

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

はい、構文は正確であり、問​​題ないはずです。

SQL Fiddle Demo 特定のケース用に作成しました

create table sample2
(
    id int primary key,
    created_date date,
    data varchar(10)
  )

insert into sample2 values (1,'2012-01-01','testing');

そして、ここでデータを選択する方法です

SELECT Created_Date
FROM sample2
WHERE Created_Date >= DATEADD(day,-11117, GETDATE())
14
Ahmad

過去7日間のレコードを選択するには

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

現在の週のレコードを選択するには

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()))

過去7日間ではなく先週のレコードを選択する場合

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()))
9
Moes
  1. クエリは正しいです

2A。最後の7日間は、テーブル全体よりも行数がはるかに少ない限り、インデックスが役立つ

2B。 Created_Dateのみに興味がある場合は、group byおよびcountを使用してみてください。結果セットのサイズに役立ちます。

3
Krystian Lieber