首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL逐时日志,显示值低于阈值n小时的所有匹配行。

SQL逐时日志,显示值低于阈值n小时的所有匹配行。
EN

Stack Overflow用户
提问于 2015-03-23 19:34:04
回答 2查看 57关注 0票数 0

我为美国市场提供了一个简单的SQL日志表(在SQLite中名为SQLite),如下所示:

样本表(market_history)

代码语言:javascript
运行
复制
id  datetime        market    percent 
1   9/5/2014 7:50   ARIZONA      50.0 
2   9/5/2014 7:50   ATLANTA      97.4 
3   9/5/2014 7:50   AUSTIN       78.8 
4   9/5/2014 7:50   BOSTON       90.9 
6   9/5/2014 7:50   CHARLOTTE    100.0 
7   9/5/2014 7:50   CHICAGO      90.3 

此表是每个市场不同系统的网络容量的每小时快照。我想做的是建立一个警报系统,如果任何一个特定的市场连续超过2个小时(每一行记录一小时)低于阈值百分比(比如50%),它就会触发一封警报电子邮件。因此,查询应该向我显示一个唯一的市场名称列表,其中的百分比为< 50.0,超过了最近的两个连续条目

这是我正在尝试的SQL,但它不起作用:

示例SQL (不工作):

代码语言:javascript
运行
复制
SELECT 
mh.datetime, mh.market, mh.percent
 FROM  markets_history mh
WHERE
 (SELECT mh1.precent FROM markets_history mh1 WHERE  mh1.datetime BETWEEN "2015-03-23 00:00:00" AND "2015-03-23 00:59:59" AND mh.market=mh1.market ) < 50 AND (SELECT mh2.precent FROM markets_history mh2 WHERE  mh2.datetime BETWEEN "2015-03-23 01:00:00" AND "2015-03-23 01:59:59" AND mh.market=mh2.market ) < 50
ORDER by mh.datetime

我知道我错过了什么..。任何建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-23 19:50:24

如果时间窗口是固定的和可靠的,只需确保最大的窗口不超过阈值。如果您需要将其扩展到两个以上,那么您看上去也不重要。

代码语言:javascript
运行
复制
select market
from markets_history mh
where mh.datetime between <last_two_hours> and <now>
group by mh.market
having max(percent) < 50.0
    -- and count(*) = 2 /* if you need to be sure of two ... */
票数 1
EN

Stack Overflow用户

发布于 2015-03-23 19:41:35

下面是一种应该在SQLite中工作的方法。在每个市场找到最后一个好的身份(如果有的话)。然后计算大于id的行数。

代码语言:javascript
运行
复制
select lastgood.market,
       sum(case when lastgood.market is null then 1
                when lastgood.id < mh.id then 1
                else 0
           end) as NumInRow
from market_history mh left join
     (select market, max(id) as maxid
      from market_history mh
      where percent < 50.0
      group by market
     ) as lastgood
     on lastgood.market = mh.market and lastgood.id < mh.id;

这个查询有点复杂,因为它需要考虑到没有任何好id的可能性。如果是这样的话,那么市场上的所有行都会计算在内。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29218833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档