如何在子查询中按sql数据分组以显示进化



我有一个sqlite数据库,它包含url和每周访问的次数。它是这样存储的:

uid, url, date, nb_visits,...

我想得到每一个URL的访问量的演变按日期分组。可能看起来像:

"my_url_1","45,54,76,36,78"

这里我的假设是数据库中存储了5个日期,不需要这些日期,只希望它们从旧到新排序我试过这样的东西,但不接受第二个选择中的2字段

select url, visits,
(select sum(visits) from data d2 where d2.url=d1.url group by date) as evol
from data d1
where date = (select max(date) from data);

这个查询不起作用只是想分享我正在尝试做的事情感谢的帮助

您想要的是每个url的GROUP_CONCAT()的结果
聚合函数GROUP_CONCAT()的问题在于它不支持ORDER BY子句,您需要根据日期对访问进行排序,因此不能保证您得到的结果是正确的

在SQLite中还有一个GROUP_CONCAT()窗口函数,它支持ORDER BY子句,可用于返回您想要的结果:

SELECT DISTINCT url,
GROUP_CONCAT(visits) OVER (
PARTITION BY url 
ORDER BY date
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) visits
FROM data 

查看简化的演示

你在找group_concat()吗?

select url, group_concat(visits)
from (select d.*
from data d
order by url, date
) d
group by url;

注意:SQLite不支持将order by作为group_concat()语法的一部分。理论上,子查询中的排序应该具有排序日期的预期效果。

最新更新