sql - 获取每个组的下一个最小值,大于或等于给定值

标签 sql sql-server-2012 greatest-n-per-group

给出以下表1:

    RefID  intVal  SomeVal
    ----------------------
        1      10    val01
        1      20    val02
        1      30    val03
        1      40    val04
        1      50    val05
        2      10    val06
        2      20    val07
        2      30    val08
        2      40    val09
        2      50    val10
        3      12    val11
        3      14    val12
        4      10    val13
        5     100    val14
        5     150    val15
        5    1000    val16

和Table2包含一些RefID和intVals,例如
    RefID  intVal
    -------------
        1      11    
        1      28    
        2       9    
        2      50    
        2      51    
        4      11    
        5       1    
        5     150    
        5     151    

需要一个SQL语句来获取每个RefID的下一个更大的intValue,如果未在Table1中找到,则为NULL
以下是预期结果
    RefID  intVal  nextGt  SomeVal 
    ------------------------------
        1      11      20  val01
        1      28      30  val03
        2       9      10  val06
        2      50      50  val10
        2      51    NULL   NULL
        4      11    NULL   NULL
        5       1     100  val14
        5     150     150  val15
        5     151    1000  val16

帮助将不胜感激!

最佳答案

给定表2的arefid时,派生表intVal从表1检索最小值。外部查询仅检索someValue。

select a.refid, a.intVal, a.nextGt, table1.SomeVal
from
(
    select table2.refid, table2.intval, min (table1.intVal) nextGt
      from table2
      left join table1
        on table2.refid = table1.refid
       and table2.intVal <= table1.intVal
     group by table2.refid, table2.intval
) a
-- table1 is joined again to retrieve SomeVal 
left join table1
  on a.refid = table1.refid
 and a.nextGt = table1.intVal

Here is Sql Fiddle with live test

关于sql - 获取每个组的下一个最小值,大于或等于给定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10736813/

相关文章:

sql - 如何检索每周的第一行

mysql - 除了其中一个之外,如何按时间戳对结果进行排序?

sql - 如何拆分数组并将其存储到 Postgresql 数据库中的表的相关列中

php - MySQL LEFT JOIN 列为空

python - IntegrityError 后继续加载

sql - 如何在单个 select 语句中替换多个字符串?

sql - 计算 SQL Server 中排除某些行的运行计数

php - 根据特定条件使用 php 回显图像

mysql - SQL语句: How do I get the highest rating and the product for each location?

MySQL:每组最大的 n 连接和条件