您好
我试图找出一种将记录分组到某些块的有效方法。记录由计数和时间组成,请参见下面的示例。每分钟计数一次。
+----------+---------------+---------------+
| count_id | count_reading | count_time |
+----------+---------------+---------------+
| 5847348 | 168 | 1358174236000 |
+----------+---------------+---------------+
| 5847347 | 342 | 1358174176000 |
+----------+---------------+---------------+
| 5847346 | 228 | 1358174116000 |
+----------+---------------+---------------+
| 5847345 | 240 | 1358174056000 |
+----------+---------------+---------------+
| 5847344 | 12 | 1358173996000 |
+----------+---------------+---------------+
| 5847343 | 0 | 1358173936000 |
+----------+---------------+---------------+
| 5847342 | 48 | 1358173876000 |
+----------+---------------+---------------+
| 5847341 | 480 | 1358173816000 |
+----------+---------------+---------------+
| 5847340 | 473 | 1358173756000 |
+----------+---------------+---------------+
| 5847339 | 380 | 1358173696000 |
+----------+---------------+---------------+
我想要实现的是个人轮班计数的总和,我有两种情况,我坚持......
结果看起来像是:
+---------------+--------------------------------------------+
| count_reading | count_time |
+---------------+--------------------------------------------+
| 10000 | Between 0700 and now starting on the 13th |
+---------------+--------------------------------------------+
| 20000 | Between 1900 and 0700 starting on the 12th |
+---------------+--------------------------------------------+
| 50000 | Between 0700 and 1900 starting on the 12th |
+---------------+--------------------------------------------+
| 10000 | Between 1900 and 0700 starting on the 11th |
+---------------+--------------------------------------------+
我正在处理两个根据场景解决上述问题的查询。我一直在寻找帮助,但运气不好,如果有人能够帮助我,我将不胜感激。
答案 0 :(得分:1)
group by
可以使用任意子句和派生值,例如(在伪代码中):
SELECT SUM(count_reading), TIME(count_time) BETWEEN 7 and 19 AS shift
GROUP BY shift
你最终会得到两个小组 - {7}的shift = 1
和19-7的shift = 0
类似于3向移位,更多逻辑:
SELECT sum(count_reading),
CASE WHEN TIME(count_time) BETWEEN 7 AND 14 THEN 1 ELSE
WHEN TIME(count_time) BETWEEN 14 and 22 THEN 2
ELSE 3 END AS shift
GROUP BY shift
实际的逻辑/ sql语法应该非常简单。