代码之家  ›  专栏  ›  技术社区  ›  Wartin

使用查询进行累进计数?

  •  2
  • Wartin  · 技术社区  · 16 年前

    我使用这个查询来

    SELECT userId, submDate, COUNT(submId) AS nSubms
    FROM submissions
    GROUP BY userId, submDate
    ORDER BY userId, submDate
    

    获取每个用户在每个日期提交的总数量。
    但是我需要有 累进计数 对于每个用户,我都可以看到他们的提交内容是如何随时间累积的。

    这可以在查询中实现吗?

      userId submDate nSubms
      1       2-Feb    1
      1       4-Feb    7
      2       1-Jan    4
      2       2-Jan    2
      2       18-Jan   1
    

    我想制作这个:

      userId submDate nSubms  progressive
      1       2-Feb    1           1
      1       4-Feb    7           8
      2       1-Jan    4           4
      2       2-Jan    2           6
      2       18-Jan   1           7
    

    • 存储过程调用

    • 更新/删除/插入/创建查询

    • 工会

    • 不同关键字

    3 回复  |  直到 6 年前
        1
  •  2
  •   bobince    16 年前

    可以使用自联接获取同一表中日期早于当前行的所有行:

    SELECT s0.userId, s0.submDate, COUNT(s0.submId) AS nSubms, COUNT (s1.submId) AS progressive
    FROM submissions AS s0
    JOIN submissions AS s1 ON s1.userId=s0.userId AND s1.submDate<=s0.submDate
    GROUP BY s0.userId, s0.submDate
    ORDER BY s0.userId, s0.submDate
    

    这将迫使数据库一次又一次地对所有相同的行进行无意义的计数。最好是把数字加起来 nSubms 当您在任何脚本中调用查询时,或者在SQL变量中,如果您的环境中有可用的话。

        2
  •  1
  •   Mladen Prajdic    16 年前

    最好的解决方案是在客户端完成。

        3
  •  1
  •   Thomas    16 年前
    Select S.userId, S.submDate, Count(*) As nSubms
        , (Select Count(*)
            From submissions As S1
            Where S1.userid = S.userId
                And S1.submDate <= S.submDate) As TotalSubms
    From submissions As S
    Group By S.userid, S.submDate
    Order By S.userid, S.submDate