2012-11-07 11 views
25

Jak wybrać dane tygodniowe (dokładniej, dane z ostatnich 7 dni) od bieżącej daty w najszybszy sposób, ponieważ mam miliony lub wiersze w tabeli. Mam znacznik czasu obiektu created_date w tabeli sql.Jak wybrać dane z ostatniego tygodnia z dzisiejszej daty?

Próbowałem to

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

Mam dwa pytania:

  1. Czy ta kwerenda jest prawidłowa?
  2. Czy to najszybszy sposób, aby uzyskać dane z siedmiu ostatnich dni z tabeli zawierającej miliony wierszy?

Odpowiedz

12

Tak, składnia jest dokładna i powinna być w porządku.

Oto SQL Fiddle Demo stworzyłem dla konkretnego przypadku

3
  1. Zapytanie jest poprawne

2A. O ile w ciągu ostatnich siedmiu dni liczba wierszy jest mniejsza niż w całej tabeli, indeks może pomóc w uzyskaniu wartości 2B. Jeśli jesteś zainteresowany tylko w CREATED_DATE można spróbować użyć jakąś grupę, i liczyć, powinno pomóc w rozmiarze ustalonym wynikiem

3

wybrać rekordy w ciągu ostatnich 7 dni

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

wybrać rekordy prądu tydzień

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

jeśli chcesz wybrać rekordy ostatniego tygodnia zamiast ciągu ostatnich 7 dni

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())) 
Powiązane problemy