非常に使用可能なtime_stampごとに特定のタグを選択する必要がある大量のデータがありますが、特定のタグの複数のtime_stampが存在する場合は、最新のloadtimestampで更新します。最新のロード時間のケース・ステートメントを含むSQL問合せ
これは私のデータセットの簡易版である:
|tag_name | value | time_stamp | loadtimestamp |
|:---------:|:-------:|:-----------------:|:-----------------:|
| TAG1 | 10 |2017-01-19 22:16:04|2017-01-19 22:49:58|
| TAG2 | 89 |2017-01-19 22:16:04|2017-01-19 22:49:58|
| TAG3 | 22 |2017-01-19 22:16:04|2017-01-19 22:49:58|
| TAG1 | 12 |2017-01-19 22:17:05|2017-01-19 22:49:58|
| TAG2 | 93 |2017-01-19 22:17:05|2017-01-19 22:49:58|
| TAG3 | 15 |2017-01-19 22:17:05|2017-01-19 22:49:58|
| TAG1 | 9 |2017-01-19 22:16:04|2017-01-22 12:29:12|
| TAG2 | 88 |2017-01-19 22:16:04|2017-01-22 12:29:12|
| TAG3 | 21 |2017-01-19 22:16:04|2017-01-22 12:29:12|
| TAG1 | 15 |2017-01-19 22:18:05|2017-01-19 22:49:58|
| TAG2 | 98 |2017-01-19 22:18:05|2017-01-19 22:49:58|
| TAG3 | 23 |2017-01-19 22:18:05|2017-01-19 22:49:58|
当初、私はloadtimestampの問題について考えていませんでしたし、次のように私のクエリはだった:
select time_stamp,
MAX(Case when tag_name = 'TAG1' then value else NULL END) as "Tagname 1",
MAX(Case when tag_name = 'TAG2' then value else NULL END) as "Tagname 2",
MAX(Case when tag_name = 'TAG3' then value else NULL END) as "Tagname 3",
from "DATATABLE".calculated_data
group by time_stamp
私はケースを使用私はデータセットの各タグに特定の名前を付ける方法が必要だったので、
結果は、22:16:04にタグに複数の結果/値があることでした。私が必要とするのは、各タグ/ time_stampに1つの値しかなく、最新のloadtimestampを持つタグ/タイムスタンプです。
最新の日付を取得しようとしているいくつかのバージョンのクエリがありますが、caseステートメントを使用している間にそれを適用する方法を見つけることができませんでした。
私は、サブクエリでいくつかのバージョンを試してみましたが、私は結果はタグが見つかった各時間が、それは同じタグとTIME_STAMPを探しているデータセット全体を照会して、最新のloadtimestampで1を選択したことだったと思います。私のデータセットは約5千万行であり、得られたテーブルは約100万であるはずなので、この方法は実現可能ではありませんでした(正直言って本当にうまく動作することはありません)。私の最終的なアプローチは、の合理的な時間内に実行できるように、幾分最適化する必要があります。
私はSQLに非常に慣れていて、奥行きが少しありますので、これがあまりにも基本的であるか、おそらく明確でない場合はお詫び申し上げます。私はこの問題に関するどんな助けや方向性にも大いに感謝します。
ありがとうございます!
そんなに感謝カピルあなたに! –