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

how to group by sql data in a sub-query to show evolution

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

uid, url, date, nb_visits,...

我想获得每个 URL 随着按日期分组的访问次数的演变。 看起来像的东西:

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

这里我的假设是数据库中存储了 5 个日期,不需要日期,只希望它们从旧到新排序 我尝试过类似的方法,但在第二个 select

中不接受 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);

此查询无效只是想分享我正在尝试做的事情 感谢帮助

您在寻找 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() 语法的一部分。理论上,子查询中的排序应该具有对日期进行排序的预期效果。

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

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

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

查看简化版 demo.