dポイントプレゼントキャンペーン実施中!

1年間の天気のデータベースがあるとします。

7月のデータを抽出し日付でソート、ある日付から、その日と同じ天気が何日続いたかを、SQLで簡単に調べる方法はあるでしょうか?

データベースは、ACCESSのmdb、VBでJETデータベースエンジンを使用していますので、高度なSQL文は使用できないかもしれません。

よろしくお願いします。

A 回答 (2件)

手元に ACCESS が無いので動作未確認ですが、下記のSQLではどうでしょうか?


(weather テーブルに、日付/時刻型のdateカラムと文字列型のweatherカラムが有ると仮定)


SELECT
date,
weather,
DateDiff("dd", date, (SELECT MIN(date) FROM weather c WHERE a.date < c.date AND a.weather <> c.weather)) AS weather_count
FROM weather a
WHERE NOT EXISTS (SELECT * FROM weather b WHERE a.date - 1 = b.date AND a.weather = b.weather) AND
date BETWEEN '2013-7-1' AND '2013-7-31'
;
    • good
    • 0

2013年7月東京の天気、


曇晴曇曇曇晴晴晴晴晴晴晴曇晴曇晴晴晴晴曇晴晴雨曇曇晴晴晴曇晴晴
――を、日付と天気の組として格納したテーブルWea1があったとして、
こんなのとか:

SELECT Wea1.WatchDay, Wea1.Weather, q3.Days
FROM (SELECT q2.WeatherBreak, Min(q2.WatchDay) AS WatchDay, Max(q2.WatchDay)- Min(q2.WatchDay)+1 AS Days FROM (
SELECT w2.WatchDay, Sum(q1.WeatherBreak) AS WeatherBreak
FROM Wea1 As w2 INNER JOIN (
SELECT Wea1.WatchDay,
IIf(q.WeatherYesterday=Wea1.Weather,0,1) AS WeatherBreak
FROM Wea1 LEFT JOIN (
SELECT [WatchDay]+1 AS WatchDay1, Wea1.Weather AS WeatherYesterday FROM Wea1
) AS q ON Wea1.WatchDay = q.WatchDay1
) As q1 ON w2.WatchDay >= q1.WatchDay GROUP BY w2.WatchDay
) As q2 GROUP BY q2.WeatherBreak) AS q3 INNER JOIN Wea1 ON q3.WatchDay=Wea1.WatchDay;
「SQLで、同じ値が何回連続するか、カウン」の回答画像1
    • good
    • 0
この回答へのお礼

早々に回答頂き、ありがとうございます。

正にこういうことなのですが、やりたいことを、もう少しシンプルにします。

ある期間のデータを抽出し日付でソート、その最初の日の天気と同じ天気が何日続いたかが分かれば結構です。

お手数をお掛けしますが、再度ご教授頂けると有難いです。

お礼日時:2013/08/12 22:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す