我需要对数据库中的数据进行分组(或以其他方式选择),这里是该数据库的简化模型:
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;
我在上面的查询结果中标记了我不需要的数据黄色
答案 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。