SQL Query聚合日期

时间:2018-06-07 14:06:14

标签: mysql sql

我想构建一个查询来聚合两个表,以获得一个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子句)

非常感谢帮助!!

2 个答案:

答案 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;