比较标准sql中的行

时间:2016-01-05 12:51:43

标签: sql

我希望以这种方式比较行并仅保留满足行的条件

将row1与第2行进行比较

  • 如果两行的ID和产品不同,则保留两行

  • 如果两行的ID和产品相同且Rate> 60之间的差异则保留两行

  • 如果两行的ID和产品相同且费率< 60之间的差异则删除最低费率行

数据是:

Id  Product   Rate
1    101         500
2    101        1000
2    101        1010
2    102        1100
3    103        1150
3    103        1250

输出结果为:

Id  Product   Rate
1    101         500
2    101        1010
2    102        1100
3    103        1150
3    103        1250

行比较的解决方案主要针对2个固定行。这里有任意数量的行,所以不确定自联接是否可以在这里工作。

数据按ID,产品和费率排序。所以我需要检查第一行第二行,然后第二行检查第三行,依此类推。

可能Soln:在MySql中,我们可以定义一个变量,并在select查询中使用相同的查询,该查询可以计算每一行。是否可以利用类似的东西来识别可以删除的行,然后使用另一个查询来删除那些被标记的行?

2 个答案:

答案 0 :(得分:0)

以下查询应该做,请记住这个'正确'仅适用于每个相同ID,产品组合不超过两个值。

SELECT
    x.id,
    x.product,
    x.rate
FROM
    datTable AS x
LEFT JOIN (
    SELECT
        id,
        product,
        min(rate) AS low,
        max(rate) AS high,
        max(rate) - min(rate) AS diff
    FROM
        datTable
    GROUP BY id, product) AS y ON (
        x.id = y.id
        AND x.product = y.product)
WHERE
    y.diff = 0
    OR (
        x.rate = y.low
        AND y.diff > 60)
    OR x.rate = y.high

答案 1 :(得分:0)

我必须为它创建一个复杂的查询。逻辑是比较每个组中的row1和row2并存储到另一个子集,将子集与主集的row3进行比较并创建subset2,将subset2与主集中的row4进行比较并创建subset3,依此类推。逻辑基于SQL服务器

aspnet_regiis