1

我有 SQL 的基本知识并有一个问题:

我正在尝试从时间序列(日期和风速)中选择数据。如果它位于 7 和 21 小时之间,我想选择原始风速值。如果小时在此范围之外,我想将风速分配给 21 小时之前的风速。还有一个问题是不存在 21 小时的偶尔点,并且希望将风速指定为 20 小时... 19 等,直到找到下一个可用小时。

SELECT 
    date,
    CASE WHEN DATEPART(HH,date) < 7 OR DATEPART(HH,date) > 21  
    THEN '<WIND SPEED AT HOUR 21> ELSE <WIND SPEED> END AS ModifiedWindspeed 
    ,WindSpeed, winddirection
from TerrainCorrectedHourlyWind w

这可能会让事情变得更清楚。如果小时在指定范围内,请选择风速。如果没有,则选择前一天 21 小时的风速。

4

1 回答 1

0

尽管您已经标记了问题,但我猜这实际上是 SQL Server,因为DATEPART()使用了该函数。尝试以下操作,它使用 anOUTER APPLY来获取您的备用值:

SELECT Date
     , CASE
           WHEN DATEPART(HOUR, Date)BETWEEN 7 AND 21 THEN w.WindSpeed
           ELSE m.WindSpeed
       END AS ModifiedWindSpeed
     , w.WindSpeed
     , w.WindDirection
  FROM TerrainCorrectedHourlyWind AS w
       OUTER APPLY(SELECT TOP 1 WindSpeed
                       FROM TerrainCorrectedHourlyWind
                   WHERE DATEPART(HOUR, Date)BETWEEN 7 AND 21
                       AND Date < w.Date
                   ORDER BY Date DESC)AS m;

只是为了解释这是在做什么 -将获得相关记录 ( ) 之前以及指定小时内日期的OUTER APPLY最新记录 (TOP 1和)。靠近顶部的选项根据小时选择是使用当前值还是使用此替代值。ORDER BY Date DESCDate < w.DateCASE

于 2013-05-27T16:34:08.883 回答