我希望以这种方式比较行并仅保留满足行的条件
将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查询中使用相同的查询,该查询可以计算每一行。是否可以利用类似的东西来识别可以删除的行,然后使用另一个查询来删除那些被标记的行?
答案 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