web-dev-qa-db-fra.com

Comment sélectionner les données de la dernière semaine de la date d'aujourd'hui

Comment sélectionner les données de la semaine (plus précisément, les données des 7 derniers jours) à partir de la date actuelle de la manière la plus rapide car j'ai des millions ou des lignes dans le tableau. J'ai un horodatage de created_date dans la table sql.

J'ai essayé ça

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

J'ai deux questions:

  1. Cette requête est-elle correcte?
  2. Est-ce le moyen le plus rapide pour obtenir les données des sept derniers jours d'une table contenant des millions de lignes?
30
Zerotoinfinity

Oui, la syntaxe est précise et elle devrait convenir.

Voici le SQL Fiddle Demo J'ai créé pour votre cas particulier

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

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

Et voici comment sélectionner les données

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

pour sélectionner les enregistrements des 7 derniers jours

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

pour sélectionner les enregistrements de la semaine en cours

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

si vous souhaitez sélectionner des enregistrements pour la semaine dernière au lieu des 7 derniers jours

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. La requête est correcte

2A. Dans la mesure où les sept derniers jours ont beaucoup moins de lignes que la table entière, un index peut aider

2B. Si vous n'êtes intéressé que par Created_Date, vous pouvez essayer d'utiliser un groupe par et compter, cela devrait vous aider avec la taille du jeu de résultats

3
Krystian Lieber