2011-08-16 18 views
7

Tôi có một yêu cầu như phải kéo tất cả các bản ghi trong phạm vi ngày người sử dụng lựa chọn, chọn tất cả các nhân viên bắt đầu từ ngày 15-Jan-2011-20-Aug-2011 và nhóm theo ngày.Chúng ta có thể sử dụng nhóm bằng và nơi mà điều kiện với cùng một fieldname

Làm thế nào tôi nên viết truy vấn SQL cho việc này:

SELECT * 
    FROM employees 
    WHERE startdate >= '15-jan-2011' 
    AND startdate <= '20-aug-2011' 
GROUP BY startdate 
+3

yêu cầu của bạn không có ý nghĩa như bằng văn bản. Nếu bạn có hai nhân viên bắt đầu vào ngày 15 tháng 1, bạn muốn trả lại chính xác những gì? bạn có thể hiển thị một số dữ liệu mẫu và kết quả mong muốn xin vui lòng, kể cả trường hợp nhiều người lao động được tuyển dụng vào cùng một ngày? Ngoài ra, nếu hai nhân viên có lương hoặc tên khác nhau, bạn muốn trả lại điều gì? Có lẽ bạn hiểu nhầm những gì 'GROUP BY' làm gì? –

Trả lời

9

Chắc chắn rồi. Nó sẽ dẫn đến lọc các hồ sơ trên phạm vi ngày và sau đó nhóm nó bằng cách mỗi ngày, nơi có dữ liệu.

Cần lưu ý rằng bạn sẽ chỉ có thể chọn STARTDATE và sau đó bất cứ điều gì uẩn bạn đang tính toán. Nếu không, nó sẽ hoạt động hoàn toàn tốt đẹp.

Ví dụ, truy vấn này sẽ cung cấp cho bạn một số nhân viên cho mỗi NgàyBắtđầu:

SELECT startdate, count(*) 
FROM employees 
WHERE startdate >= '15-jan-2011' 
     AND startdate <= '20-aug-2011' 
GROUP BY startdate 
1

Bạn có thể, nhưng "GROUP BY" khoản được sử dụng để nhóm lại với nhau bộ hàng, vì vậy nó không có ý nghĩa cho câu hỏi của bạn (hoặc bất cứ điều gì liên quan đến một "SELECT *").

Để trả lời câu hỏi của bạn mặc dù:

SELECT DATEADD(dd, 0, DATEDIFF(dd,0,StartDate)) AS 'StartDate', <other fields> 
FROM Employees 
WHERE StartDate BETWEEN '15-Jan-2011' AND '20-Jan-2011' 
ORDER BY StartDate 

Lưu ý: hợp tước thời gian từ ngày đến từ here

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