2016-11-30 78 views
0

我的表是 “统计” 和列:高级SQL查询

Id | user | date | product | number 

示例数据:

1 | 1 | 29-11-2016 | 1 | 4 
2 | 1 | 30-11-2016 | 1 | 3 
3 | 2 | 30-11-2016 | 1 | 2 
4 | 2 | 1-12-2016 | 1 | 2 

现在我想从一些第一数均(x)的顺序日期为任何用户和产品= 1。

如果x = 1,这个数据查询应该返回3(avg其中id为1和3) 如果x = 2这个数据查询应该返回2,75(avg其中id = 1,2,3和)

是否有可能在一个查询中做到这一点?

回答

0

你的原始查询应该是:

select avg(number) as average, user, date from statistic 
where product = 1 
order by date asc 
group by user 

在QueryBuilder的:

$query = $this->createQueryBuilder('s'); 
$query->select('AVG(s.number) as average, s.user, s.date') 
    ->where('s.product = :product') 
    ->setParameter('product', $product) 
    ->addGroupBy('s.user') 
    ->addOrderBy('s.date', 'asc'); 

//result will be an array 
$result = $query->getQuery()->getResult(); 
+0

谢谢你,但我只想x个最古老的统计产品和用户:)如果我想只有第一( x = 1)比我想从29-11-2016(用户1)和30-11-2016(用户2)获得统计数据。 – Micchaleq

+0

对不起,你的问题不清楚。让我看看。 – Rawburner