我有一个存储产品最大和最小价格中断的数据库表。
有谁知道 SQL,如果我从一个 Max 到下一个项目的 Min 有一个休息时间。例如 1-10 12-20 如果它可以通过每个范围检测到绝对最小值和绝对最大值的中断,我希望它返回丢失的数字或至少一个计数或布尔值。
SQL 服务器 (MSSQL) 2008
对于支持窗口函数的数据库,如 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。如果您的数量范围可能重叠,则需要提供所需的逻辑。
像这样的东西,给出的最大数量不是产品的整体最大数量,并且后面没有最小数量:
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 的行。