|ID |DATE |TimeZone |val |
|---|---|---|
|1 |20210115 |1 |43 |
|1 |20210115 |2 |44 |
|2 |20210116 |1 |21 |
|2 |20210117 |1 |20 |
|3 |20210114 |1 |32.1 |
|3 |20210115 |1 |32 |
|3 |20210115 |2 |31.5 |
上記データからIDごとの最新日付かつ最新時間帯の値を取得したいと考えております。
SQL
1with data as( 2 select 1 ID, '20210115' date, 1 timeZone, 43 val 3 union all 4 select 1 ID, '20210115' date, 2 timeZone, 44 val 5 union all 6 select 2 ID, '20210116' date, 1 timeZone, 21 val 7 union all 8 select 2 ID, '20210117' date, 1 timeZone, 20 val 9 union all 10 select 3 ID, '20210114' date, 1 timeZone, 32.1 val 11 union all 12 select 3 ID, '20210115' date, 1 timeZone, 32 val 13 union all 14 select 3 ID, '20210115' date, 2 timeZone, 31.5 val 15), 16maxDate as( 17 select ID, max(date) date 18 from data 19 group by ID 20), 21maxTimeZone as( 22 select ID, max(timeZone) timeZone 23 from data 24 where exists( 25 select 1 26 from maxDate 27 where maxDate.ID = data.ID 28 AND maxDate.date = data.date 29 ) 30 group by ID 31) 32 33select data.* 34from data join maxDate 35on data.ID = maxDate.id 36and data.date = maxDate.date 37join maxTimeZone 38on data.ID = maxTimeZone.ID 39and data.timeZone = maxTimeZone.timeZone
上記SQLにて想定しているレコードの取得は出来るのですが、
ID毎の最新日付を取得するクエリ①とIDと最新日付毎の最新時間帯を取得するクエリ②と
上記①②を用いてテーブルから取得するクエリの3つのクエリが走るため処理が遅いように思えます。
実際のテーブルでは取得元のテーブルに数万件のデータが登録される想定のため、
もっとよい取得方法がないか模索しているのですが知識不足のため自分では思いつきませんでした。
より良い取得方法があるのであればご教授いただけないでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/15 09:45