我有一个数据库表,用于存储产品的最高和最低价格中断。
有没有人知道SQL,如果我从下一项的一个Max到Min的中断。例如。 1-10 12-20如果能通过每个范围检测到绝对最小值和绝对最大值的中断,我希望它能够返回丢失的数字或至少是计数或布尔值。
SQL Server(MSSQL)2008
答案 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。如果您的数量范围可能重叠,则需要提供所需的逻辑。
答案 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行。