38

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

私はこれを試しました

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

2 つの質問があります。

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

3 に答える 3

19

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

これは、特定のケース用に作成した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())
于 2012-11-07T08:56:17.613 に答える
15

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

SELECT * FROM [TableName]
WHERE Created_Date >= DATEADD(day, -7, GETDATE())

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

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

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

SET DATEFIRST 1 -- Define beginning of week as Monday
SELECT * FROM [TableName] 
WHERE CreatedDate >= DATEADD(day, -(DATEPART(WEEKDAY, GETDATE()) + 6), CONVERT(DATE, GETDATE())) 
  AND CreatedDate <  DATEADD(day, 1 - DATEPART(WEEKDAY, GETDATE()), CONVERT(DATE, GETDATE()))
于 2016-06-03T02:50:20.540 に答える
3
  1. クエリは正しい

2A。過去 7 日間の限り、テーブル全体よりも行がはるかに少ないため、インデックスが役立ちます

2B. Created_Date のみに関心がある場合は、group by と count を使用してみてください。結果セットのサイズに役立つはずです。

于 2012-11-07T09:19:53.560 に答える