检查最大最小值中的序列

时间:2012-10-12 10:02:33

标签: sql max min lag

我有一个数据库表,用于存储产品的最高和最低价格中断。 enter image description here

有没有人知道SQL,如果我从下一项的一个Max到Min的中断。例如。 1-10 12-20如果能通过每个范围检测到绝对最小值和绝对最大值的中断,我希望它能够返回丢失的数字或至少是计数或布尔值。

SQL Server(MSSQL)2008

2 个答案:

答案 0 :(得分:3)

对于支持窗口功能的数据库,如Oracle:

SELECT t.*
     , CASE LAG(maxq+1, 1, minq) OVER (PARTITION BY prod ORDER BY minq)
          WHEN minq
          THEN 0
          ELSE 1
       END AS is_gap
  FROM tbl t
;

对于与前一行形成间隙的行(由minq排序),这将产生is_gap = 1。如果您的数量范围可能重叠,则需要提供所需的逻辑。

http://sqlfiddle.com/#!4/f609e/4

答案 1 :(得分:1)

这样的东西,给出的最大数量不是产品的总体最大值,并且没有跟随它们的最小数量:

select prev.tbProduct_Id,prev.MaxQuantity
  from yourtable prev
  left join (select tbProduct_ID, max(MaxQuantity) MaxQuantity from yourtable group by tbProduct_id) maxes
    on maxes.tbProduct_ID=prev.tbProduct_Id and maxes.MaxQuantity=prev.MaxQuantity
  left join yourtable next
    on next.tbProduct_Id=prev.tbProduct_Id and next.MinQuantity=prev.MaxQuantity+1
  where maxes.tbProduct_Id is null and next.tbProduct_Id is null;

但是,这样会对您的样本数据失败,因为它会预期MinQuantity 21的行,而不是20行。