RDBMSはセットベースのロジックに最も適しています。だから、二組の観点でデータを考える:
- W2:時間
の期間、すべての測定値を含むデータの宇宙:特定の日
- ワットのための最高の一時を含むデータセットを
これら2つのセットを結合することによって、与えられた日の最高温度を有するwからのデータだけを得ることができる。
ユニバースセット{w}全体に対してインラインビュー{w2}を使用することで、毎日の最高温度を生成し、基本セット{w}に再び加わり、毎日の最高温度の時間情報を取得できます。あなたが関係を処理する方法を示していないてきたように、最大温度は、あなたがそれらすべてをしたい、同じ日に複数のレコード上にある場合
- :
これがあることを前提としています。
- datestampには時間コンポーネントがあります。それは1日の最高温度を見たい日時です。
これは、の意味他の人が最も可能性の高い参加するものである:
- 日付(日付スタンプ)は、単に日付/時刻の日付コンポーネントを返します。
- MAX()(日付スタンプのこの場合は日付)で表される基
によって最大温度を返します。
SELECT datestamp, Temp
FROM weather W
INNER JOIN (SELECT date(datestamp) mDate, max(temp) as mtemp
FROM weather
GROUP BY Date(DateStamp)) W2
on W.temp = W2.mtemp
and Date(w.Datestamp) = w2.mDate
ADDITIONAL INFO: MySQLはまた、おそらくより高いパフォーマンスで、この問題を解決するために使用することができcross apply
や分析機能row_number() Over (partition by date(datestamp) order by temp desc)
をサポートしていません。 SQL Server、Oracle、DB2、PostgreSQLはすべてこれを解決するさまざまな方法を持っています。上記の例は、私が考えることができるすべてのRDBMSエンジンで動作します。すべての場合において最も効率的ではありません。
あなたはどのようにネクタイを扱いますか?だから同じ日に10のレコードがある場合、そのうちの4つのテンポラリが同じ場合は、4つの日付スタンプがすべて必要ですか?一つだけ? 1つあれば? – xQbert