Sql 按日期选取最后一行分组

Sql 按日期选取最后一行分组,sql,query-builder,Sql,Query Builder,我需要按日期选择内容统计组 以下是记录示例: id cid viewCount created_at 1 1 50 31-12-2018 18:00:00 2 1 50 01-01-2019 18:00:00 3 2 50 01-01-2019 18:00:00 4 2 100 01-01-2019 19:00:00 5 2 150 01-01-2019 20:00:00 6 3 1

我需要按日期选择内容统计组

以下是记录示例:

id cid viewCount created_at
1    1  50        31-12-2018 18:00:00
2    1  50        01-01-2019 18:00:00
3    2  50        01-01-2019 18:00:00
4    2  100       01-01-2019 19:00:00
5    2  150       01-01-2019 20:00:00
6    3  1000      01-01-2019 15:00:00
需要返回:

id cid viewCount date
1    1  50        31-12-2018
2    1  50        01-01-2019
5    2  150       01-01-2019
6    3  1000      01-01-2019
我尝试了以下代码

        $qb = $this->createQueryBuilder('c');
        $qb->select('a.id as id')
           ->addSelect('COALESCE(SUM(a.viewCount),0) as viewCount')
           ->addSelect('DATE_FORMAT(a.createdAt, \'%d-%m-%Y\') as date');
           ->innerJoin('c.analytics', 'a')
           ->groupBy('c.cid')
           ->addGroupBy('date')
           ->orderBy('a.createdAt', 'ASC');
返回:

id cid viewCount date
1   1  50        31-12-2018
2   1  50        01-01-2019
3   2  50        01-01-2019
4   2  100       01-01-2019
5   2  150       01-01-2019
6   3  1000      01-01-2019
我已尝试创建子查询:

        $qbLastHour = $this->createQueryBuilder('cc');
        $qbLastHour->select('MAX(DATE_FORMAT(aa.createdAt, \'%H\'))')
            ->innerJoin('cc.analytics', 'aa')
            ->where('cc.id=c.id')
            ->groupBy('cc.cid')
            ->addGroupBy('s');

        $qb->addSelect(sprintf("(%s) AS r", $qbLastHour->getDQl()));
但是出现了一些问题,因为我没有在子查询中按日期分组

如果有人能帮我。谢谢你更新

这里再次尝试在sql中,根据每天的最大时间,每个日期只选择一行和cid

SELECT id, c.cid, viewCount, max_date
FROM content a
JOIN content_analytic c ON a.id = c.content_id
RIGHT JOIN (SELECT c.cid, DATE_FORMAT(created_at, '%d-%m-%Y') dt, MAX(created_at) max_date
            FROM content a
            JOIN content_analytic c ON a.id = c.content_id
            GROUP BY dt, c.cid) x ON x.max_date = a.created_at and x.cid = c.cid
这就是我认为在纯sql中查询的方式

SELECT c.cid, COALESCE(SUM(a.viewCount), 0), DATEFORMAT(a.created_at, ‘%d-%m-%Y’) as date
FROM content a
INNER JOIN content_analytic c ON a.id = c.content_id
GROUP BY c.cid, date
ORDER BY date

不要按id分组。@clinomaniac谢谢你的回答我犯了一个错误我编辑了这篇文章。我需要按contentId cid分组你在什么上加入?@JoakimDanielson我从我的内容中选择,并在content\u analysis上加入内容分析。content\u id=content.idOk,很难理解真正的sql问题是什么。为什么您要更改预期结果,以便将时间包括在内,而这些值为什么不能相加?谢谢您的帮助。你不按小时过滤吗?我需要约会的最后几个小时。你说的“按小时过滤”是什么意思?您的查询中没有WHERE子句?例如,我的示例中的id 3,4,5。只需返回id即可=5@Spawnrad这就是我的代码所做的,因为不包括a.id。我猜你在用MySql?哦,我知道我在努力