2016-12-13 14 views
0

私たちはMysqlを使用しており、このような1時間ごとのデータセットから最後の2つの就業日の平均を取得しようとしています。勤務日に応じて最後の2日間を照会


Date  Workday 
2016-12-13 1 
2016-12-14 1 
2016-12-15 0 
2016-12-16 0 

1は、勤務時間を意味し、0は週末や祝日

を意味します


Date    Price 
2016-12-13 00:00 187,68 
2016-12-13 01:00 201 
2016-12-13 02:00 211,66 
2016-12-13 03:00 215,84 

は、だから我々は一日、このような勤務時間や休日の場合を示す(平日)という名前のテーブルを作成しまた、とにかく、Workdaysテーブルを別々に考えると、最後の2つの平日の平均価格を照会する必要があります

これは可能ですか?

ありがとうございます。

+0

はなぜあなたのテーブル 'Workdays'を持っていますしてみてください重複?そして、2016-12-13は本当に就業日ですか?それには矛盾する値があります。 –

+0

あなたはそうです、私のverは非常に悪いです。ごめんなさい。正しい値は次のとおりです:2016-12-13 1 2016-12-14 1 2016-12-15 0 2016-12-16 0 –

答えて

1

私が正しく理解している場合、テーブルworkdaysには実際に各日付に対して1つの行があります。もしそうなら、あなたはサブクエリの中で最も最近の2営業日を取得し、最初のテーブル内の行を選択するjoinを使用することができます。

select wd.date, avg(h.Price) 
from hourly h join 
    (select wd.date 
     from workdays wd 
     where wd.workday = 1 and wd.date <= curdate() -- you might want < 
     order by wd.date desc 
     limit 2 
    ) wd2 
    on date(h.date) = wd.date 
group by wd.date; 
+0

ありがとうございます!非常にうまく動作します。 –

0

この

select W.Date, AVG(Price) 
from Prices p 
join Workdays W on 
    w.Date = DATE(P.Date) 
    AND Workday=1 
    and W.Date <= curdate() 
group by W.Date 
order by W.Date desc; 
+0

残念ながら、このクエリではAVGは表示されませんが、データは2016-12-12 00:00に表示されます。 (私たちがクエリを実行すると12月13日です) –

+0

それは私には受け入れられた答えと同じ結果を見せますが、クエリコストの3分の1になります – MtwStark

関連する問題