0

我有一个存储产品最大和最小价格中断的数据库表。 在此处输入图像描述

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

SQL 服务器 (MSSQL) 2008

4

2 回答 2

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

于 2012-10-12T10:32:04.780 回答
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 的行。

于 2012-10-12T10:16:56.427 回答