2011-08-16 10 views
7

2011年1月15日から2011年8月20日までに開始したすべての従業員を選択し、ユーザーが選択した期間内にすべてのレコードをプルする必要があります。日付でグループ化する。同じフィールド名のgroup byとwhere条件を使用できます

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

から来ました。 1月15日に2名の従業員を雇った場合、正確に何が返されますか?同じ日に複数の従業員が雇われた場合を含め、いくつかのサンプルデータと希望の結果を表示できますか?また、2人の従業員の給与や名前が異なる場合、返されるものは何ですか?あなたは 'GROUP BY'のしていることを誤解しているのでしょうか? –

答えて

9

絶対に:

は、どのように私はこのためのSQLクエリを記述する必要があります。それはあなたの日付範囲のレコードをフィルタリングし、データがある毎日それをグループ化する結果になります。

開始日と計算中の集計のみを選択できることに注意してください。それ以外の場合は、正常に動作するはずです。

はたとえば、次のクエリはあなたに、各STARTDATEのための従業員のカウント与える:

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

することができますが、一緒に行のセットをグループ化するために使用される句「BY GROUP」が、それはしていませんあなたの質問(または「SELECT *」を含むもの)には意味をなさない。


はしかし、あなたの質問に答えるために:

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 

注:日からの時間のストリッピングが書かれたあなたの要件は意味がありませんhere

関連する問題