如果列 x 上的用户记录不为空,我如何计算该用户第一次不为空后拥有的记录数?

克里斯

我想在第一次 x 不为该用户为空之后为每个用户创建一个记录数计数。

我有一个类似于以下内容的表:

 id | user_id | completed_at | x
----+---------+--------------+---
  1 |    1001 | 2017-06-01   | 1
 20 |    1001 | 2017-06-01   | 2
 21 |    1001 | 2017-06-02   | 4
 22 |    1001 | 2017-06-03   |
 24 |    1001 | 2017-06-03   |
 25 |    1001 | 2017-06-04   |
 23 |    1001 | 2017-06-04   |
 12 |    1001 | 2017-06-06   |
 13 |    1001 | 2017-06-07   |
 14 |    1001 | 2017-06-08   |
  2 |    1002 | 2017-06-02   | 3
 27 |    1002 | 2017-06-02   | 7
 15 |    1002 | 2017-06-09   |
  3 |    1003 | 2017-06-03   |
  4 |    1004 | 2017-06-04   |
  5 |    1005 | 2017-06-05   |
 33 |    1005 | 2017-06-20   | 8
 34 |    1006 | 2017-07-10   | 9
  6 |    1006 | 2017-10-06   |
  7 |    1007 | 2017-10-07   |
  8 |    1008 | 2017-10-08   |
  9 |    1009 | 2017-10-09   |
 10 |    1010 | 2017-10-10   |
 16 |    1011 | 2017-06-01   |
 11 |    1011 | 2017-07-01   | 5
 17 |    1012 | 2017-06-02   |
 26 |    1012 | 2017-07-02   | 6
 18 |    1013 | 2017-06-03   |
 19 |    1014 | 2017-06-04   |
 31 |    1014 | 2017-06-24   |
 32 |    1014 | 2017-06-24   |
 30 |    1014 | 2017-06-24   |
 29 |    1014 | 2017-06-24   |
 28 |    1014 | 2017-06-24   |

预期的输出如下所示:

+------+------------+---------------+
| user |  first_x   | records_after |
+------+------------+---------------+
| 1001 | 2017-06-01 |             9 |
| 1002 | 2017-06-02 |             2 |
| 1005 | 2017-06-20 |             0 |
| 1011 | 2017-07-01 |             0 |
| 1012 | 2017-07-02 |             0 |
+------+------------+---------------+
亚历山大议员

使用运行计数,然后使用运行计数 > 0 的条件计数

样本

WITH flags AS (
    SELECT
      user_id,
      completed_at,
      sum(CASE WHEN x IS NULL THEN 0 ELSE 1 END) OVER (PARTITION BY user_id ORDER BY completed_at ROWS BETWEEN UNBOUNDED PRECEDING AND 0 FOLLOWING) AS flag
    FROM users
),
completed AS (
    SELECT DISTINCT ON (user_id)
      user_id,
      completed_at AS first_x
    FROM flags
    WHERE flag > 0
    ORDER BY user_id, completed_at
)
SELECT DISTINCT
  user_id AS user,
  first_x,
  count(flag) FILTER (WHERE flag>0) - 1 AS records_after
FROM flags
NATURAL JOIN completed
GROUP BY 1, 2
ORDER BY 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL JOIN ON,如果列x不为null,否则列y

来自分类Dev

如果不为空,如何串联多个列

来自分类Dev

如何检查每条记录是否有多个列不为空?

来自分类Dev

如果div不为空,请从dom中删除X

来自分类Dev

INSERT 'X' 如果更新另一列

来自分类Dev

Python:[如果f(x)不为空,则list_of_tuples中(x,y)中的(x,y)为[(x,y)]

来自分类Dev

Python:[如果f(x)不为空,则list_of_tuples中(x,y)中的(x,y)为[(x,y)]

来自分类Dev

Excel:如果另一列的值不为空,则求和?

来自分类Dev

如果y在同一列中至少出现一次,如何删除x的整行?

来自分类Dev

SQL查询,如果列具有Y值,则在列中添加值x

来自分类Dev

如果列x是重复记录,请合并列a,b,c-SQL

来自分类Dev

如果列不为空,则为不同的列选择多行,否则选择列为空的第一行

来自分类Dev

计算列的平均值并显示结果(如果小于x数)

来自分类Dev

如果上一列包含单元格=“ X”,如何自动取消隐藏下一列

来自分类Dev

如果用户第一次使用jQuery访问页面,如何确定本地存储

来自分类Dev

如果用户第一次单击“打印”按钮,如何抑制数据

来自分类Dev

如何计算一列中不为空的元素

来自分类Dev

如果单元格不为空,如何复制前一行不同列中的值?

来自分类Dev

如果 A 列是“X”或“Y”,而 B 列是“Z”,如何做对 C 列中的值求和的 Excel 公式?

来自分类Dev

如何计算不为空的列中的元素

来自分类Dev

如何计算列中的“优于X%的用户”?

来自分类Dev

如果列总和小于X,则更新行

来自分类Dev

eloquent 仅适用于如果列不为空的情况

来自分类Dev

SQL - 如果不为空,则选择不同表中的列

来自分类Dev

python csv | 如果row = x,则打印包含x的列

来自分类Dev

如果一个字段不为空,则所有必填项都不为空

来自分类Dev

如果某列(z)大于另一列(y)中的数据,则使用另一列(x)中的数据填充该列(z)

来自分类Dev

如果X参数在模板中为空,则隐藏{{{X}}}?

来自分类Dev

Mysql:向所有用户显示该用户正在关注,如果我也关注该用户,则添加动态列

Related 相关文章

  1. 1

    MySQL JOIN ON,如果列x不为null,否则列y

  2. 2

    如果不为空,如何串联多个列

  3. 3

    如何检查每条记录是否有多个列不为空?

  4. 4

    如果div不为空,请从dom中删除X

  5. 5

    INSERT 'X' 如果更新另一列

  6. 6

    Python:[如果f(x)不为空,则list_of_tuples中(x,y)中的(x,y)为[(x,y)]

  7. 7

    Python:[如果f(x)不为空,则list_of_tuples中(x,y)中的(x,y)为[(x,y)]

  8. 8

    Excel:如果另一列的值不为空,则求和?

  9. 9

    如果y在同一列中至少出现一次,如何删除x的整行?

  10. 10

    SQL查询,如果列具有Y值,则在列中添加值x

  11. 11

    如果列x是重复记录,请合并列a,b,c-SQL

  12. 12

    如果列不为空,则为不同的列选择多行,否则选择列为空的第一行

  13. 13

    计算列的平均值并显示结果(如果小于x数)

  14. 14

    如果上一列包含单元格=“ X”,如何自动取消隐藏下一列

  15. 15

    如果用户第一次使用jQuery访问页面,如何确定本地存储

  16. 16

    如果用户第一次单击“打印”按钮,如何抑制数据

  17. 17

    如何计算一列中不为空的元素

  18. 18

    如果单元格不为空,如何复制前一行不同列中的值?

  19. 19

    如果 A 列是“X”或“Y”,而 B 列是“Z”,如何做对 C 列中的值求和的 Excel 公式?

  20. 20

    如何计算不为空的列中的元素

  21. 21

    如何计算列中的“优于X%的用户”?

  22. 22

    如果列总和小于X,则更新行

  23. 23

    eloquent 仅适用于如果列不为空的情况

  24. 24

    SQL - 如果不为空,则选择不同表中的列

  25. 25

    python csv | 如果row = x,则打印包含x的列

  26. 26

    如果一个字段不为空,则所有必填项都不为空

  27. 27

    如果某列(z)大于另一列(y)中的数据,则使用另一列(x)中的数据填充该列(z)

  28. 28

    如果X参数在模板中为空,则隐藏{{{X}}}?

  29. 29

    Mysql:向所有用户显示该用户正在关注,如果我也关注该用户,则添加动态列

热门标签

归档