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

SQL查询记录在一定范围内,最大/最小超出范围

史谦
2023-03-14
问题内容

我有以下三个简单的T-SQL查询。第一个是获取一定范围内的记录(DATETIME类型):

 SELECT value, timestamp 
 FROM myTable
 WHERE timestamp BETWEEN @startDT AND @endDT

第二个是获取最接近@startDT的记录(DATETIME类型)

 SELECT TOP 1
   value, timestamp
 FROM myTable
 WHERE timestamp > @startDT
 ORDER BY timestamp DESC

最后一个是获取@endDT之后最接近的记录:

 SELECT TOP 1
   value, timestamp
 FROM myTable
 WHERE timestamp < @endDT
 ORDER BY timestamp ASC

我想将以上三个查询的所有记录作为一组记录。我尝试使用UNION,但似乎UNION中的子查询不允许使用ORDER BY子句。有没有有效的方法来得到我的结果?

 . .  * | * * * * * | * . . .
      start        end

上图仅将* s的记录显示为我的必需记录,而| … | 是边界。

顺便说一句,myTable中的数据量很大。我的理解UNION不是从UNION获取数据的有效方法。有没有UNION的有效数据获取方法吗?


问题答案:

如您所愿,没有UNION。

MySQL(已 测试

SELECT 
     dv1.timestamp, dv1.values
FROM 
     myTable AS dv1
WHERE 
    dv1.timestamp 
    BETWEEN (
           SELECT dv2.timestamp 
           FROM myTable AS dv2
           WHERE dv2.timestamp < '@START_DATE' 
           ORDER BY dv2.timestamp DESC 
           LIMIT 1
           )
    AND ( SELECT dv3.timestamp 
          FROM myTable AS dv3
          WHERE dv3.timestamp > '@END_DATE' 
          ORDER BY dv3.timestamp ASC 
          LIMIT 1
        )

编辑 抱歉,我忘了注意到T-SQL。

T-SQL(未 测试

SELECT 
     dv1.timestamp, dv1.values
FROM 
     myTable AS dv1
WHERE 
    dv1.timestamp 
    BETWEEN (
           SELECT TOP 1 dv2.timestamp 
           FROM myTable AS dv2
           WHERE dv2.timestamp >  @START_DATE 
           ORDER BY dv2.timestamp DESC
           )
    AND ( SELECT TOP 1 dv3.timestamp 
          FROM myTable AS dv3
          WHERE dv3.timestamp <  @END_DATE 
          ORDER BY dv3.timestamp ASC
        )

注意 如果结果不正确,则可以只交换子查询(即运算符和ASC / DESC)。

跳出思维限制 :)



 类似资料:
  • 我刚刚开始使用角度2。所以我尝试使用Web服务从数据库显示类别。 这是我的论坛.服务.ts文件 forum.component.ts: forum.component.html: 请帮忙,先谢了

  • 给定两个数a和b(1<=a<=b<=10^6)。在a和b之间的所有素数中找出最常见的数字。如果频率相同,则打印最高数字。 例:从1到20,素数是-2,3,5,7,11,13,17,19。这里2,5,9只出现一次,3,7出现两次,1出现5次。所以结果是1。 一个基本方法是: 在[a,b]范围内-求所有素数。 取一个数组计算0到9之间的出现次数。 对于范围内的所有素数,提取所有数字,并相应地增加计数数

  • 我一直在寻找这个问题的答案,但运气不佳,所以希望有人能帮助我! 我正在处理周期性数据,我试图找到两个波峰和两个波谷的相关值——这不一定等同于最大/最小和第二个最大/最小值,而是最大/最小和第二个最大/最小值,条件是该值大于/小于前面和后面的值。 这是一个循环的例子 我有 1000 个周期,所以我在 dplyr 中使用group_by对周期进行分组,然后希望在组中应用条件最大值/最小值参数。 我很感

  • 我使用https://formidable.com/open-source/urql/用于从React Native中的GraphQL服务器获取数据。 该组件的实现方式如下: 运行应用程序时,查询按预期工作,我从GraphQL服务器接收数据。 但是,控制台会显示错误消息: 未处理的promise拒绝,[RangeError:超出最大调用堆栈大小。]在node_modules/core-js/内部/

  • 如果我运行此代码,我会收到错误RangeError:超出最大调用堆栈大小。但为什么呢?当我用9调用它时就发生了,斐波那契在这么小的数字下应该不是问题。

  • 我试图创建一个简单的查询,以从索引日志存储中的文档返回匹配的deploymentId。 我能够搜索匹配查询,但当添加时间范围得到以下豁免。 错误: “type”:“parsing\u exception”, “reason”:“[匹配]格式错误的查询,应为[END\u OBJECT],但找到了[FIELD\u NAME]”, 我只想要匹配部署ID的最后15分钟记录。