当前位置: 首页 > 面试题库 >

使用SQL查询识别趋势

益楷
2023-03-14
问题内容

我有一个表(让我们称之为数据),其中包含一组对象ID,数字值和日期。我想确定在过去X分钟(例如一个小时)内其值呈正趋势的对象。

示例数据:

entity_id | value | date

1234      | 15    | 2014-01-02 11:30:00

5689      | 21    | 2014-01-02 11:31:00

1234      | 16    | 2014-01-02 11:31:00

我尝试着看类似的问题,但不幸的是没有找到任何帮助…


问题答案:

您启发了我去在SQL Server中实现线性回归。可以对MySQL / Oracle /
Whatever进行修改,而不会带来太多麻烦。这是确定每个entity_id在一小时内趋势的数学上最好的方法,并且只会选择趋势为正的趋势。

它实现了此处列出的用于计算B1hat的公式:https
://en.wikipedia.org/wiki/Regression_analysis#Linear_regression

create table #temp
(
    entity_id int,
    value int,
    [date] datetime
)

insert into #temp (entity_id, value, [date])
values
(1,10,'20140102 07:00:00 AM'),
(1,20,'20140102 07:15:00 AM'),
(1,30,'20140102 07:30:00 AM'),
(2,50,'20140102 07:00:00 AM'),
(2,20,'20140102 07:47:00 AM'),
(3,40,'20140102 07:00:00 AM'),
(3,40,'20140102 07:52:00 AM')

select entity_id, 1.0*sum((x-xbar)*(y-ybar))/sum((x-xbar)*(x-xbar)) as Beta
from
(
    select entity_id,
        avg(value) over(partition by entity_id) as ybar,
        value as y,
        avg(datediff(second,'20140102 07:00:00 AM',[date])) over(partition by entity_id) as xbar,
        datediff(second,'20140102 07:00:00 AM',[date]) as x
    from #temp
    where [date]>='20140102 07:00:00 AM' and [date]<'20140102 08:00:00 AM'
) as Calcs
group by entity_id
having 1.0*sum((x-xbar)*(y-ybar))/sum((x-xbar)*(x-xbar))>0


 类似资料:
  • 当我在GSI上查询时,我对Amazon DynamoDBv2的Amazon DynamoDBAsync.query异步请求的实现返回代码400“查询条件错过了关键模式元素......”。 我尝试使用DynamoDBAttribute名称(“myAttr”)和GSI的实际索引名称(“idx\u global\u myAttr”),并收到相同的错误代码。这与Docker的图片“amazon/dynam

  • 问题内容: 我正在用PHP构建RSS提要,它使用来自三个单独表的数据。这些表均指向站点不同区域内的页面。我遇到的问题是尝试在XML中创建链接字段。在不知道每个记录来自哪个表的情况下,我无法创建指向该表的正确链接。 有办法解决这个问题吗?我尝试使用mysql_fetch_field,但它为表返回了空白值。 还涉及其他字段,但这基本上是我正在使用的查询。 问题答案: 应该足够简单,只需执行以下操作:

  • 问题内容: 我正在研究“您可能认识的人”功能。我有两个表: 用户 id email name etc 朋友 user_id friend_id 对于每一次友谊,我都会做两个记录。假设用户7和9成为朋友…我要在友谊表中记录一条user_id = 7,friend_id = 9,另一条user_id = 9,friend_id = 7的记录。 如何根据朋友中的朋友进行sql查询,以建议我可能认识的人?

  • 我们在OIM将承包商期限延长至80天,但有时管理员/经理会将期限延长至80天以上。当它被扩展时,OIM创建一个请求id。现在,我们想知道从延期之日(请求创建日期)起期限超过80天的所有用户。 有没有办法在SQL查询中获取用户的详细信息以及在终止日期属性上发生的请求创建日期,以便我们可以创建BI报告。 因为我有一个昨天创建的请求,所以我用它来开发查询。我尝试通过加入usr、Request和reque

  • 问题内容: 我正在使用Jesey在Java(JAX-RS)中实现Restful Web Service。我在Tomcat v7.0上运行它,我使用Hibernate将数据映射到数据库(MySQL)。我有一个查询来获取可交付成果的列表: 它给了我一百个可交付成果,但我想在Task表中拥有前三名。感谢您的帮助。如何修改查询? 请注意,这三个可交付成果不应重复。 与@FGreg答案存在冲突。当我使用这些

  • 问题内容: 我希望使用find在rails控制器中编写此SQL查询: 我该怎么做?我正在使用Rails框架和MySQL。提前致谢。 问题答案: 简单方法: 一枪: