将选择更改为上一个日期

时间:2013-05-27 15:44:09

标签: sql sql-server

我有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

这可能会让事情更加清晰。如果小时在指定范围内,请选择windspeed。如果没有,那么选择前一天21小时的风速。

1 个答案:

答案 0 :(得分:0)

虽然你已经标记了问题,但我猜这实际上是SQL Server,因为使用了DATEPART()函数。请尝试以下操作:使用OUTER 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 1ORDER BY Date DESC){{1 }}以及在指定的时间内。顶部附近的Date < w.Date选择是使用当前值还是基于小时的备用值。