我想构建一个查询来聚合两个表,以获得一个project_id的所有component_id的所有max(date)的值
组件
id project_id
200 100
201 100
component_meta
id component_id value date
1 200 1000 2018-01-01 (this component_id is older)
2 200 1200 2018-01-02
3 201 2000 2018-01-02
查询
SELECT … FROM … WHERE project_id = 100
应为结果:
value
3200
我使用INNER JOIN进行了测试,但大部分时间都出现了无效错误(...聚合函数或GROUP BY子句)
非常感谢帮助!!
答案 0 :(得分:1)
我建议使用相关子查询来获取最新的组件值,然后聚合:
<HTML
html = {htmlBody}
tagsStyles = {{
span: {fontSize: 16},
p: {fontSize: 16, color: 'green'}
}}
classesStyles = {{
'ql-size-large': {fontSize: largeSize, color:'red'},
'ql-size-small': {fontSize: smallSize, color:'yellow'}
}
}/>
为获得最佳效果,您需要select sum(cm2.value)
from component c join
component_meta cm
on cm.component_id = c.id
where c.project_id = 100 and
cm.date = (select max(cm2.date)
from component_meta cm2
where cm2.component_id = cm.component_id
);
和component(project_id, id)
上的索引。
答案 1 :(得分:0)
我在内存中严格执行此操作,但根据您提供的信息,它应该是这样的:
htmlspecialchars
注意,我也在尽力解释你的要求。你说期望的结果是3200,我假设这是对项目ID 100的component_meta值的求和。如果这被误解,请告诉我。
如果您只想要与最大日期匹配的求和元值,则应该是:
SELECT SUM(component_meta.value)
FROM component
INNER JOIN component_meta ON component.id = component_meta.component_id
WHERE component.project_id = 100;