2012-11-07 56 views
25

Cách chọn dữ liệu tuần (chính xác hơn, dữ liệu 7 ngày qua) từ ngày hiện tại theo cách nhanh nhất khi tôi có hàng triệu hoặc hàng trong bảng. Tôi có một dấu thời gian của created_date trong bảng sql.Cách chọn dữ liệu một tuần cuối từ ngày hôm nay

Tôi đã cố gắng này

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

Tôi đã hai câu hỏi:

  1. là truy vấn này là đúng?
  2. Đây có phải là cách nhanh nhất để lấy dữ liệu bảy ngày cuối cùng từ một bảng có hàng triệu hàng không?

Trả lời

12

Vâng, cú pháp chính xác và nó sẽ ổn.

Đây là SQL Fiddle Demo tôi đã tạo cho trường hợp cụ thể của bạn

3
  1. Truy vấn là đúng

2A. Theo như bảy ngày qua có hàng ít hơn nhiều so với toàn bộ bảng, chỉ mục có thể giúp

2B. Nếu bạn chỉ quan tâm đến CREATED_DATE bạn có thể thử sử dụng một số nhóm bằng và đếm, nó sẽ giúp với kích thước kết quả bộ

3

để chọn hồ sơ cho 7 ngày qua

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

để chọn hồ sơ cho dòng điện tuần

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

nếu bạn muốn chọn hồ sơ cho tuần cuối cùng thay vì 7 ngày qua

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())) 
Các vấn đề liên quan