2013-02-12 39 views
5

Chúng tôi có orders dữ liệu và chúng tôi cần tạo báo cáo Weekly - Custom date Range of 7 Days sử dụng SQL. Báo cáo sẽ hiển thị hàng tuần count đơn đặt hàng. Người dùng sẽ chọn End Date và chúng tôi cần tạo 12 đơn vị DateRange dựa trên ngày đó. Ví dụ người sử dụng chọn 1/24/2013 chúng ta cần 12 điểm/đơn vị như:Đây có phải là cách tốt nhất để viết SQL cho báo cáo này không?

Point12 = End Date - 7 Days 
Point11 = End Date - 14 Days 
Point10 = End Date - 21 Days 
Point9 = End Date - 28 Days 
. 
. 
Point1 = End Date - X Days 

giải pháp của chúng tôi:

Chúng tôi đang có kế hoạch để tạo ra một bảng tạm thời bảng mà sẽ có 12 dòng. Mỗi hàng sẽ có dữ liệu như (chúng tôi sẽ tính toán STARTDATE và EndDate cho mỗi điểm):

Point StartDate   EndDate  TotalOrders 
Point12 2013-01-24   2013-01-30 
Point11 2013-01-17   2013-01-23 

Sau này, chúng tôi sẽ nhận được count của Đơn đặt hàng cho mỗi hàng.

Đây có phải là giải pháp tốt cho vấn đề này hoặc có thể tối ưu hóa không?

EDIT:

DATERANGE hàng tuần sẽ là một Custom date Range of 7 Days.

enter image description here

+0

@EdHeal: Tôi có thể tự làm. nhưng tôi chỉ muốn biết rằng tôi đang làm nó theo cách tốt nhất có thể. –

+1

trong trường hợp này, bạn nên sử dụng biến Bảng để có hiệu suất tốt hơn. Bạn có thể đọc bài viết này về sự khác biệt: http://www.sql-server-performance.com/2007/temp-tables-vs-variables/ –

+0

Làm thế nào bạn nhận được 'đếm' cho mỗi hàng? – msmucker0527

Trả lời

-1

Tại sao không chỉ cần sử dụng tuần như nhóm yếu tố?

SELECT 
WEEKOFYEAR(`date`) AS point, 
SUM(orders) AS order 
FROM `tablename` 
WHERE `date` BETWEEN `startdate` AND `enddate` 
GROUP BY point 
1

Cho rằng đây là SQLServer, tôi đề nghị sử dụng biến bảng, chứ không phải bảng tạm thời.

Cách tiếp cận khác là tạo 12 hàng trong CTE như một phần của truy vấn chính, thay vì tạo các hàng bắt buộc (trong bảng biến/bảng tạm thời) như một bước riêng trước truy vấn chính. Điều này sẽ làm giảm tổng số bước cần thiết, nhưng sẽ làm cho truy vấn chính hơi phức tạp hơn.

+0

Lý do cơ bản cho lời khuyên "Tôi đề nghị sử dụng một biến bảng, chứ không phải là một bảng tạm thời."? Tôi không nhất thiết không đồng ý nhưng bạn nên nêu rõ lợi ích mà bạn tin rằng sẽ đạt được. –

+0

Đó là một huyền thoại. Cả hai biến bảng và bảng '# temp' đều được giữ trong' tempdb' và cả hai bảng đều có khả năng có tất cả các trang trong bộ nhớ cho một bảng nhỏ. –

+0

Xem bài viết MSDN này: http://msdn.microsoft.com/en-us/library/ms175010.aspx –

Các vấn đề liên quan