【问题标题】:SQL, count days with occurences of several modulesSQL,计算几个模块出现的天数
【发布时间】:2020-01-03 19:21:54
【问题描述】:

我的数据显示了几个不同模块在某个时间戳上出现的 A 和 B,这是一个虚拟表(抱歉布局,真的不知道如何正确执行此操作):

-------------------------------------------
|Timestamp  |    Occurrence   |  Module  |

2018-01-29 11:03:31  | A      |       M1

2018-01-29 15:23:38  | A      |       M1

2018-01-29 17:10:10  |  B     |       M1

2018-01-29 20:49:47  |  B     |     M2

2018-01-29 21:01:11   | A     |   M2

-

2018-01-30 02:32:16   | A     |       M1

2018-01-30 04:59:47  |  B     |       M2

-

2018-01-31 03:18:25  |  B     |        M2

2018-01-31 07:26:55 |   A     |       M2

2018-01-31 09:01:01  |  A     |         M1

2018-01-31 11:41:33  |  B     |         M2

2018-01-31 14:58:42  |  B      |        M2

我想要的是让所有模块计算记录至少 1 次事件的天数,并计算发生次数 A 和 B,这样对于虚拟表就会出现以下结果:

Module  | Occurence_A | Occurence_B

_ M1 _    |   _____ 3 ____      |     ____1____

_ M2 _    |   _____2_____      |      ____3____

我尝试了几个 GROUP BY 和 SELECT COUNT 语句,但我似乎无法弄清楚。有谁可以帮忙?

【问题讨论】:

  • 该事件是否只有值 A 和 B?
  • 它们也可以有其他值,但我只想看看 A 和 B。

标签: mysql datetime group-by count


【解决方案1】:

GROUP BY 模块并计算出现的不同日期:

SELECT Module,
   COUNT(DISTINCT CASE WHEN Occurrence = 'A' THEN DATE(Timestamp) END) AS Occurrence_A,
   COUNT(DISTINCT CASE WHEN Occurrence = 'B' THEN DATE(Timestamp) END) AS Occurrence_B
FROM tablename
WHERE Occurrence IN ('A', 'B')
GROUP BY Module

请参阅demo
结果:

| Module | Occurrence_A | Occurrence_B |
| ------ | ------------ | ------------ |
| M1     | 3            | 1            |
| M2     | 2            | 3            |

【讨论】:

  • 谢谢!我明天会检查并尝试实施它,但我相信它有效
  • 太棒了!正是我想要的!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
相关资源
最近更新 更多