これが私のクエリです:
WITH desc_table(counter, hourly, current_weather_description, current_icons, time_stamp) AS (
Select count(*) AS counter, CASE WHEN strftime('%M', 'now') < '30'
THEN strftime('%H', 'now')
ELSE strftime('%H', time_stamp, '+1 hours') END as hourly,
current_weather_description,
current_icons,
time_stamp
From weather_events
GROUP BY strftime('%H', time_stamp, '+30 minutes'), current_weather_description
UNION ALL
Select count(*) as counter, hourly - 1, current_weather_description, current_icons, time_stamp
From weather_events
GROUP BY strftime('%H', time_stamp, '+30 minutes'), current_weather_description
Order By counter desc limit 1
),
avg_temp_table(avg_temp, hour_seg, time_stamp) AS (
select avg(current_temperatures) as avg_temp, CASE WHEN strftime('%M', time_stamp) < '30'
THEN strftime('%H', time_stamp)
ELSE strftime('%H', time_stamp, '+1 hours') END as hour_seg,
time_stamp
from weather_events
group by strftime('%H', time_stamp, '+30 minutes')
order by hour_seg desc
)
Select hourly, current_weather_description
from desc_table
join avg_temp_table
on desc_table.hourly=avg_temp_table.hour_seg
基本的に、私は 1 時間間隔 (30 分ずつオフセット) にグループ化したいくつかの気象データを持っています。具体的には、その時間間隔で特定の天気の説明 (および一致するアイコン) を取得した回数を数え、その範囲内で天気の説明を選択したいと考えています。発生数 (カウント) が最も多い時間間隔 (desc_table)。次に、その時間セグメント内の平均気温を取得したいと思います ((avg_temp_table)(おそらくサブクエリが必要ですか?私が持っている方法ではなく、この平均を実行するには)、時間列に沿って 2 つのクエリを結合します。
クエリが作成された時間 (現在) に基づいてアンカーを作成し、発生回数をカウントしてから、次のメンバーが毎回 1 時間を減算し、次の時間間隔に移動してカウントするなどします。
サンプル データ。通常のデータセット {current_temperatures, current_weather_description, current_icons, time_stamp} の各時間セグメント内により多くの行があります。
"87" "Rain" "rainicon" "2016-01-20 02:15:08"
"65" "Snow" "snowicon" "2016-01-20 02:39:08"
"49" "Rain" "rainicon" "2016-01-20 03:15:08"
"49" "Rain" "rainicon" "2016-01-20 03:39:08"
"46" "Clear" "clearicon" "2016-01-20 04:15:29"
"46" "Clear" "clearicon" "2016-01-20 04:38:53"
"46" "Cloudy" "cloudyicon" "2016-01-20 05:15:08"
"46" "Clear" "clearicon" "2016-01-20 05:39:08"
"45" "Clear" "clearicon" "2016-01-20 06:14:17"
"45" "Clear" "clearicon" "2016-01-20 06:34:23"
"45" "Clear" "clearicon" "2016-01-20 07:24:54"
"45" "Rain" "rainicon" "2016-01-20 07:44:41"
"43" "Rain" "rainicon" "2016-01-20 08:19:08"
"36" "Clear" "clearicon" "2016-01-20 08:39:08"
"35" "Meatballs" "meatballsicon" "2016-01-20 09:18:08"
"18" "Cloudy" "cloudyicon" "2016-01-20 09:39:08"
出力は、時間間隔の平均気温 (avg_temp_table) と最初の集計 CTE (desc_table) {avg_temp, weather_description, current_icon} の出力を結合したものです。
"87" "Rain" "rainicon"
"57" "Rain" "rainicon"
"47" "Clear" "clearicon"
"46" "Clear" "clearicon"
"46" "Cloudy" "cloudyicon"
"45" "Clear" "clearicon"
"44" "Rain" "rainicon"
"36" "Clear" "clearicon"
"18" "Cloudy" "cloudyicon"
現在、アンカーがweather_eventsテーブルから来ており、再帰メンバーもそうであるため、そのような列エラーは発生していません。再帰メンバーを desc_table に変更すると、「再帰集計クエリはサポートされていません」というエラーが表示されます。しかし、私は desc_table から再帰メンバーを取得したくありません。時間ごとにセグメント化し、1 時間間隔ごとにカウントを取得したいと考えています。そもそもアンカーも間違っていると思います。