在Microsoft SQL Server中查找过去22个月内或过去22个月内任何10小时窗口之间的最大值

时间:2017-04-07 21:39:10

标签: sql sql-server

我希望找到过去22个月内的最大值或过去22个月内任何10小时窗口内的最大值。

我在Microsoft SQL Server中这样做。

基本上,我想要检索一个持续高达至少10个小时的值,然后才认为它是我的最大值,如果它超过过去22个月的最大值,它将是新的最大,否则我将使用过去22个月的最大值。

我觉得它应该看起来像伪代码:

   if (time > 10 hours) AND (value = max) OR (18 > time > 0) AND (value = max)

   then output = value

我尝试过的SQL代码:

SELECT TOP 90 PERCENT
    DATEADD(s,time,'19700101') as time_22month
    ,GETDATE() as date_22month
    ,b.tagname as tag_22month
    ,value as value_22month
    ,maximum as max_22month
FROM
    db..hour a
INNER JOIN 
    db..tag b
ON
    a.tagid = b.tagid
WHERE 
    b.tagname like '%T500.1234%' 
AND
    (GETDATE() - DATEADD(s, time, '19700101') < 670) 
ORDER BY
    max_22month DESC 

SELECT 
    DATEADD(s,time,'19700101') as time_10hour
    ,GETDATE() as date_10hour
    ,b.tagname as tag_10hour
    ,value as value_10hour
    ,maximum as max_10hour
FROM
    db..hour a
INNER JOIN 
    db..tag b
ON
    a.tagid = b.tagid
WHERE 
    b.tagname like '%T500.1234%' 
AND
    (GETDATE() - DATEADD(s, time, '19700101') < 0.42) 
ORDER BY
    max_10hour DESC 

现在输出如下:

+-------------------------+----------------------------+-------------+----------------+---------------+
|      time_22month       |        date_22month        | tag_22month | value_22month  |  max_22month  |
+-------------------------+----------------------------+-------------+----------------+---------------+
| 2016-03-08 06:00:00.000 | 2017-04-10 10:07:57:32.783 | T500.1234   |  1567.88546416 | 2445.56419848 |
| 2016-03-08 07:00:00.000 | 2017-04-10 10:07:57:32.783 | T500.1234   |  1499.88546416 | 2434.47673719 |
+-------------------------+----------------------------+-------------+----------------+---------------+

+-------------------------+----------------------------+------------+---------------+---------------+
|       time_10hour       |        date_10hour         | tag_10hour | value_10hour  |  max_10hour   |
+-------------------------+----------------------------+------------+---------------+---------------+
| 2017-04-10 00:00:00.000 | 2017-04-10 10:07:57:32.783 | T500.1234  | 8763.42572454 | 8759.64548912 |
| 2017-04-10 01:00:00.000 | 2017-04-10 10:07:57:32.783 | T500.1234  | 8001.64578943 | 8001.64578943 |
+-------------------------+----------------------------+------------+---------------+---------------+

所以我对如何比较这些最大值感到有点困惑,特别是当10小时窗口需要滚动时(每小时递增一次)。任何帮助表示赞赏。

输出应该是两个参数的较大值,因此可能会有一个新的表列,以及在其前面显示最高22个月值和最高10个小时窗口值的两列。

+--------+-------------+------------+------+
| Month  | 22Month_Max | 10Hour_Max | Max  |  
+--------+-------------+------------+------+
| July   |        5478 |       5999 | 5999 |
| August |        4991 |       3523 | 4991 |
+--------+-------------+------------+------+

0 个答案:

没有答案