2

一部のデータを含む単一の時系列テーブルがありますが、タイムスタンプが時々ずれています。タイムスタンプを確認するために、日の出と日没を手動で定義し、PAR (Photosynthetically Active Radiation) 値を使用して太陽正午の推定値を取得しました。PAR は、どれだけの光が入ってくるかを示します。両者の中間地点。PAR が 1.9 を超える記録 (通常は午前 7 時頃) を夜明け、PAR が 1.9 以下の記録を夕暮れと宣言することにしました。

1.9 を超える PAR 値を選択し、GROUP BY を使用して各日の最小時間値と最大時間値を見つけました。これは機能します。

datePart、MIN(timePart) AS 日の出、MAX(timePart) として日没、TIMEDIFF(MAX(timePart), MIN(timePart)) AS dayHours FROM Imnavait101119_110225 WHERE PAR_2029410_uE>1.9 GROUP BY datePart

わかりました(はい、正解です。北極圏のサイトです)。

    datePart    sunrise sunset          dayHours    dayHoursHalf
    07/09/2010  0:07:00 23:52:00    23:45:00    NULL
    07/10/2010  0:07:00 23:52:00    23:45:00    NULL
    07/11/2010  0:07:00 23:22:00    23:15:00    NULL
    07/12/2010  1:37:00 23:52:00    22:15:00    NULL
    07/13/2010  0:07:00 23:52:00    23:45:00    NULL
    07/14/2010  0:07:00 23:52:00    23:45:00    NULL
    07/15/2010  0:07:00 23:52:00    23:45:00    NULL
    07/16/2010  0:07:00 23:52:00    23:45:00    NULL
    07/17/2010  0:07:00 23:52:00    23:45:00    NULL
    07/18/2010  0:07:00 23:52:00    23:45:00    NULL
    07/19/2010  0:22:00 23:52:00    23:30:00    NULL
    07/20/2010  0:07:00 23:52:00    23:45:00    NULL
    07/21/2010  0:07:00 23:52:00    23:45:00    NULL

TIMEDIFF 値を取得したので、この値を 2 で割り、日の出に加算して正午を取得します。値を保持する列を作成しましたが、取得方法がわかりません。2 で割ったり、0.50 で掛けたりすることはできましたが、通常はこれらの行に沿って、非常に奇妙な結果が得られます。

SELECT  @dayHoursHalf := (dayHours * 0.50) as dayHoursHalf 

FROM Imnavait101119_110225_TimestampCheck

そして私はこれを得る:

dayHoursHalf
117250
117250
115750
110750
117250
117250
117250
117250
117250
117250
116500
117250
117250
117250

どこから始めればよいかさえわかりません。これらの数値は私には意味がありません。また、分数の時間値のクエリをコーディングする方法についても何も見つかりません。

回答者の皆様、どうもありがとうございました。

4

3 に答える 3

1

ええと、11.7250 x 2 = 23.45 です。これが「日中」の値です。これが正しければ、時間を 2 で割る必要があるので、まず、値を substr() して 23 と 45 を取得する方がよいと思います。適切な時間を取得するよりも。

于 2013-08-03T09:04:53.003 に答える
1

正しく理解していれば、このようにして値を選択できます

SELECT q.*, 
       ADDTIME(sunrise, SEC_TO_TIME(TIME_TO_SEC(dayHours) / 2)) dayHoursHalf 
FROM
(
  SELECT datePart, 
         MIN(timePart) sunrise, 
         MAX(timePart) sunset, 
         TIMEDIFF(MAX(timePart), MIN(timePart)) dayHours 
    FROM Imnavait101119_110225 
   WHERE PAR_2029410_uE > 1.9 
   GROUP BY datePart
) q

出力例:

+------------+----------+----------+----------+--- ------------+
| | 日付の部分 | 日の出 | 日没 | 日時間 | dayHoursHalf |
+------------+----------+----------+----------+--- ------------+
| | 2010-07-09 | 00:07:00 | 23:52:00 | 23:45:00 | 11:59:30.0000 |
| | 2010-07-10 | 00:07:00 | 23:52:00 | 23:45:00 | 11:59:30.0000 |
| | 2010-07-11 | 00:07:00 | 23:22:00 | 23:15:00 | 11:44:30.0000 |
| | 2010-07-12 | 01:37:00 | 23:52:00 | 22:15:00 | 12:44:30.0000 |
...

これがSQLFiddleのデモです


そして、dayHoursHalfそれぞれの値で列を更新するために

UPDATE Table1
   SET dayHoursHalf = ADDTIME(sunrise, SEC_TO_TIME(TIME_TO_SEC(dayHours) / 2))

これがSQLFiddleのデモです

于 2013-08-03T09:10:54.093 に答える