2017-06-20 17 views
0

SQLServer 2008r2の使用 - 毎時レコードが挿入されたテーブルがあります。私のクエリの関連する列は、currentScore(int)とobsDate(smallDateTime)です。私は1日に5つのレコードをグループ化したい。今日、今日の2日前(深夜から)と2日後日ごとのグループ化と条件付きカウントの問題

 theDate   numOfScores 
2017-06-18 00:00:00.000 23 
2017-06-19 00:00:00.000 22 
2017-06-20 00:00:00.000 24 
2017-06-21 00:00:00.000 24 
2017-06-22 00:00:00.000  9 

私がしたい:そうは次のように私のレコードセットが見えます

select dateadd(DAY,0, datediff(day,0, obsDate)) as theDate, 
count(currentScore) as numOfScores 
from diseaseScores 
where siteID=8315 and obsDate > dateAdd(day, -2, (SELECT CONVERT(DATETIME, 
CONVERT(DATE, CURRENT_TIMESTAMP)) + '00:00')) 
group by dateadd(DAY,0, datediff(day,0, obsDate)) 
order by dateadd(DAY,0, datediff(day,0, obsDate)) 

:SOその6月20日は、私は成功しそうのようにこれをやっている6月18日、19、20、21と22をしたい場合特定の範囲内のcurrentScoreの数を数える3つの列を追加します。このようなもの

CASE 
WHEN currentScore < 8 THEN COUNT(where currentScore < 8) as Low 
WHEN currentScore > 8 and < 17 THEN COUNT(where currentScore > 8 and < 17) as Med 
WHEN currentScore > 17 THEN COUNT(where currentScore > 17) as High 

私はこれを選択したケースで行うことはできますか?これを達成する最良の方法は何ですか?

theDAte numOfScores low med high 
2017-06-18 23  23 0  0 
2017-06-19 22  22 0  0 
2017-06-20 24  5  19 0 
2017-06-21 24  0  24 0 
2017-06-22 9   0  9  0 
+0

質問を編集し、達成したい結果を表示してください。 –

答えて

1

まず、cast(. . as date)を使用します。ここでは、事前

おかげで、私が達成したい結果です。はっきりと!

select cast(obsDate as date) as theDate, 
     count(currentScore) as numOfScores , 
     sum(case when currentScore < 8 then 1 else 0 end) as currentscore_low, 
     sum(case when currentScore >= 8 and currentScore < 17 then 1 else 0 end) as currentscore_medium, 
     sum(case when currentScore >= 17 then 1 else 0 end) as currentscore_high 
from diseaseScores 
where siteID = 8315 and 
     obsDate >= cast(getdate() - 2 as date) 
group by cast(obsDate as date) 
order by cast(obsDate as date); 

注:その後、あなたは条件付き集約を使用してやりたいことができますあなたの元where句は半分しか日付条件を持っています。私は残りの半分を追加しませんでしたが、それは将来2日以上を取得する方法をかなり明らかにする必要があります。

+0

よかった、ありがとう。それだけで完璧です。私はCASEを間違って使っていると感じました。私があなたの質問を見ると、今はとても分かりそうです。したがって、日付としてキャストを使用すると、その時間が大幅に少ない文字で私の目的を達成する、素晴らしい。おかげさまでゴードン、お時間をいただきありがとうございます! – Mat41