Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中,在给定每日每小时数据的情况下,如何在上午8点到晚上8点的12小时范围内平均每小时间隔数据?_Sql_Sql Server_Datetime_Where Clause - Fatal编程技术网

在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语句并以这种方式进行过滤谢谢你兄弟-对之前的标签道歉!