在SQL Server中,在给定每日每小时数据的情况下,如何在上午8点到晚上8点的12小时范围内平均每小时间隔数据?
我的数据库中有以下格式的每小时间隔数据:在SQL Server中,在给定每日每小时数据的情况下,如何在上午8点到晚上8点的12小时范围内平均每小时间隔数据?,sql,sql-server,datetime,where-clause,Sql,Sql Server,Datetime,Where Clause,我的数据库中有以下格式的每小时间隔数据: EFFECTIVEDATETIME NEW_YORK ETC... --------------------------------------- 2017-01-01 01:00:00.000 44 2017-01-01 02:00:00.000 44 2017-01-01 03:00:00.000 45 2017-01-01 04:00:00.000 44 2017-01-01 05:00:00.000 4
EFFECTIVEDATETIME NEW_YORK ETC...
---------------------------------------
2017-01-01 01:00:00.000 44
2017-01-01 02:00:00.000 44
2017-01-01 03:00:00.000 45
2017-01-01 04:00:00.000 44
2017-01-01 05:00:00.000 45
2017-01-01 06:00:00.000 44
2017-01-01 07:00:00.000 44
2017-01-01 08:00:00.000 44
2017-01-01 09:00:00.000 44
2017-01-01 10:00:00.000 46
2017-01-01 11:00:00.000 45
2017-01-01 12:00:00.000 46
2017-01-01 13:00:00.000 47
2017-01-01 14:00:00.000 47
2017-01-01 15:00:00.000 47
2017-01-01 16:00:00.000 47
2017-01-01 17:00:00.000 46
2017-01-01 18:00:00.000 45
2017-01-01 19:00:00.000 43
2017-01-01 20:00:00.000 41
2017-01-01 21:00:00.000 42
2017-01-01 22:00:00.000 42
2017-01-01 23:00:00.000 41
我试图将纽约和以下专栏的平均值仅用于特定范围,从08:00:00.000到20:00:000。我可以用下面的代码做一整天。然而,我更希望能够平均我的数据,只有12小时的时间。任何帮助都将不胜感激,谢谢
SELECT
CAST(EFFECTIVEDATETIME AS DATE) AS EFFECTIVE_DATE,
AVG(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN TEMPERATURE ELSE NULL END) AS NEW_YORK,
AVG(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN DEWPOINT ELSE NULL END) AS NEW_YORK_DEWPOINT,
AVG(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN RelativeHumidity ELSE NULL END) AS NEW_YORK_HUMIDITY,
MAX(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN TEMPERATURE ELSE NULL END) AS NEW_YORK_DAILY_MAX,
MIN(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN TEMPERATURE ELSE NULL END) AS NEW_YORK_DAILY_MIN
FROM
DBO.WeatherHourly
WHERE
EffectiveDateTime > '2017-01-01'
GROUP BY
CAST(EFFECTIVEDATETIME AS DATE)
ORDER BY
EFFECTIVE_DATE
您可以在
WHERE
子句中添加一个过滤条件:
SELECT CAST(EFFECTIVEDATETIME AS DATE) AS EFFECTIVE_DATE,
AVG(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN TEMPERATURE ELSE NULL END) AS NEW_YORK,
AVG(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN DEWPOINT ELSE NULL END) AS NEW_YORK_DEWPOINT,
AVG(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN RelativeHumidity ELSE NULL END) AS NEW_YORK_HUMIDITY,
MAX(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN TEMPERATURE ELSE NULL END) AS NEW_YORK_DAILY_MAX,
MIN(CASE WHEN WEATHERSTATIONID = 'KNYC' THEN TEMPERATURE ELSE NULL END) AS NEW_YORK_DAILY_MIN
FROM DBO.WeatherHourly
WHERE EffectiveDateTime > '2017-01-01' AND DATEPART(hour, EffectiveDateTime) BETWEEN 8 AND 19
GROUP BY CAST(EFFECTIVEDATETIME AS DATE)
ORDER BY EFFECTIVE_DATE
如果要将开始时间限制为间隔,可以使用:
WHERE EffectiveDateTime > '2017-01-01' AND
CAST(EffectiveDateTime as TIME) BETWEEN '08:00:00' AND '20:00:00'
如果您还想对结束日期/时间进行限制,那就更具挑战性了。我删除了不一致的数据库标记。请仅使用您真正使用的数据库进行标记。不是100%清楚,但如果您在effectiveDateTime上添加时间检查,使其仅包括8到20小时之间的时间,您应该会得到您想要的谢谢!我不知道你可以添加and语句并以这种方式进行过滤谢谢你兄弟-对之前的标签道歉!