使用组A中缺少的值从组B中选择数据

时间:2016-08-30 16:18:15

标签: mysql sql join group-by

我需要对数据库中的数据进行分组(或以其他方式选择),这里是该数据库的简化模型:

user: { id: int, name: varchar } 
scenario: { id: int, displayname: varchar, userId: int}
costgroup: { id: int, displayname: varchar }
costgroupvalue: { id: int, scenarioId: int, value: float, year: year, costgroupId: int}

有一个场景(Id:1),其中 CostGroupValues 的范围从2012年到2018年,一个场景(Id:2)带< em> CostGroupValues 范围从2016年到2018年。

我需要的是:一个场景(Id:2)的 CostGroupValues ,但是从2012年到2015年缺少 CostGroupValues 其他场景(Id:1)。

以下是我已经做过的查询示例:

SELECT costgroupvalue.*
FROM costgroup
JOIN costgroupvalue ON costgroup.id = costgroupvalue.costgroupid
JOIN scenario ON scenario.id = costgroupvalue.scenarioid
And scenario.userid = '666'
Group by costgroupvalue.id;

我在上面的查询结果中标记了我不需要的数据黄色

picture

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案:

SELECT costgroupvalue.*
FROM costgroup
JOIN costgroupvalue ON costgroup.id = costgroupvalue.costgroupid
JOIN scenario ON scenario.id = costgroupvalue.scenarioid
AND scenario.userid = '14'
WHERE (scenario.id = 2 AND  costgroupvalue.year between '2016' AND '2018')
Or (scenario.id = 1 AND  costgroupvalue.year between '2012' AND '2015')
Group by costgroupvalue.id
Order by costgroupvalue.costgroupid, costgroupvalue.scenarioid, costgroupvalue.year

此查询为我提供了我需要的行:2012年至2015年的ScenarioId = 1,2016年至2018年的ScenarioId = 2。