我有一个包含一些数据的时间序列表,但时间戳偶尔会关闭。为了检查时间戳,我们已经手动定义日出和日落以使用PAR(光合有效辐射)值估算太阳中午 - PAR说明有多少光进入 - 确定黎明和黄昏,然后推断太阳中午在两者之间的中点。我们决定宣布PAR升至1.9以上,通常是早上7点左右的记录是黎明,而PAR等于或小于1.9的记录被视为夜幕降临。
我选择了高于1.9的PAR值,然后使用GROUP BY找到每天的最小和最大时间值,这有效:
SELECT datePart,MIN(timePart)AS sunrise,
MAX(timePart)日落,
TIMEDIFF(MAX(timePart)
MIN(timePart))AS dayHours FROM
Imnavait101119_110225
在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
我甚至不知道从哪里开始 - 这些数字对我来说毫无意义,而且我找不到任何关于如何为小数时间值编码查询的信息。
非常感谢所有响应者。
答案 0 :(得分:2)
编辑:我错误地计算了“中午”而不是dayHours
的一半,这个查询会做你真正想要的事情:)
UPDATE Imnavait101119_110225_TimestampCheck
SET dayHoursHalf = SEC_TO_TIME(TIME_TO_SEC(dayHours)/2);
原件:
此查询改为计算“中午”的时间,正好在日出和日落之间;
UPDATE Imnavait101119_110225_TimestampCheck
SET dayHoursHalf = SEC_TO_TIME(TIME_TO_SEC(`sunrise`) +
TIME_TO_SEC(dayHours)/2);
(请注意,SQLfiddle出于某种原因显示时间值的虚拟日期:))
答案 1 :(得分:1)
那么,11.7250 x 2 = 23.45,这是你" Day hours"的价值。 如果我做对了,你需要将时间除以2,所以首先我认为最好是substr()你的值得到23和45.比你能得到合适的时间。
答案 2 :(得分: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
示例输出:
+------------+----------+----------+----------+---------------+ | datePart | sunrise | sunset | dayHours | 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 演示