计算a之间b的个数

lsmepo6l  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(324)

我在计算数据库中每个a之前我得到了多少个b。
类似表格:

  1. ID - value - datetime
  2. 10 A 2018-10-10 10:10:10
  3. 9 B 2018-10-10 09:09:09
  4. 8 B 2018-10-10 08:08:08
  5. 7 B 2018-10-10 07:07:07
  6. 6 B 2018-10-10 06:06:06
  7. 5 A 2018-10-10 05:05:05
  8. 4 B 2018-10-10 04:04:04
  9. 3 B 2018-10-10 03:03:03
  10. 2 B 2018-10-10 02:02:02
  11. 1 A 2018-10-10 01:01:01

但我想从

  1. ID - datetime - count
  2. 10 2018-10-10 10:10:10 4
  3. 5 2018-10-10 05:05:05 3
  4. 1 2018-10-10 01:01:01 0

类似于:计算行与行之间的行数
编辑:
在答案的帮助下,我把它修改成了我自己的表格

  1. SELECT a.ID
  2. , COALESCE(b.i,0) cnt
  3. FROM
  4. ( SELECT x.*
  5. , MAX(y.ID) y_ID
  6. FROM tapdatabeer x
  7. LEFT
  8. JOIN tapdatabeer y
  9. ON y.ID < x.ID
  10. AND y.beerstatus = '0'
  11. WHERE x.beerstatus = '1' AND x.beerline = 5 AND x.masterID = 4015
  12. GROUP
  13. BY x.ID
  14. ) a
  15. LEFT
  16. JOIN
  17. ( SELECT ID
  18. , beerstatus
  19. , CASE WHEN beerstatus = '0' then @i:=@i+1 ELSE @i:=0 END i
  20. FROM tapdatabeer
  21. , (SELECT @i:=0) vars
  22. WHERE beerline = 5 AND masterID = 4015
  23. ORDER
  24. BY ID
  25. ) b
  26. ON b.ID = a.y_ID

我已经手动检查了这里每行的结果应该在200到210之间。我得到这个的原因是因为我的id不在一行,因为这个表中还有c和d。我需要为查询创建一个自定义计数器。但我的结果是:

  1. ID cnt
  2. 258991 0
  3. 265187 0
  4. 266442 0
  5. 272383 0
  6. 273134 206
  7. 277077 0
o4tp2gmn

o4tp2gmn1#

  1. DROP TABLE IF EXISTS my_table;
  2. CREATE TABLE my_table
  3. (id SERIAL PRIMARY KEY
  4. ,value CHAR(1) NOT NULL
  5. );
  6. INSERT INTO my_table VALUES
  7. ('A'),('B'),('B'),('B'),('A'),('B'),('B'),('B'),('B'),('A');
  8. SELECT a.id
  9. , COALESCE(b.i,0) cnt
  10. FROM
  11. ( SELECT x.*
  12. , MAX(y.id) y_id
  13. FROM my_table x
  14. LEFT
  15. JOIN my_table y
  16. ON y.id < x.id
  17. AND y.value = 'b'
  18. WHERE x.value = 'a'
  19. GROUP
  20. BY x.id
  21. ) a
  22. LEFT
  23. JOIN
  24. ( SELECT id
  25. , value
  26. , CASE WHEN value = 'b' then @i:=@i+1 ELSE @i:=0 END i
  27. FROM my_table
  28. , (SELECT @i:=0) vars
  29. ORDER
  30. BY id
  31. ) b
  32. ON b.id = a.y_id;
  33. +----+------+
  34. | id | cnt |
  35. +----+------+
  36. | 1 | 0 |
  37. | 5 | 3 |
  38. | 10 | 4 |
  39. +----+------+
展开查看全部

相关问题