2

これが私のクエリです:

    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 時間間隔ごとにカウントを取得したいと考えています。そもそもアンカーも間違っていると思います。

4

1 に答える 1