【发布时间】:2014-08-24 15:34:40
【问题描述】:
我想为我的一个图表检索数据,并且想为它想出一个简单的解决方案,而不是执行 8 个子查询。
users 表如下所示:
user_id
1
2
3
4
5
pts 表如下所示:
id user_id status points time
1 1 0 100 2014-08-23 03:34:54
2 4 0 100 2014-08-23 04:04:44
3 1 1 300 2014-08-23 08:34:21
4 1 0 300 2014-08-23 15:25:11
5 1 0 200 2014-08-23 22:23:12
查询看起来像这样(有几个 cmets,我不知道该放什么):
"SELECT *,
(
SELECT SUM(points)
FROM pts
WHERE status = 0
AND user_id = 1
AND time >= "THIS DAY'S 00:00" AND <= "THIS DAY'S 03:00"
),
(
SELECT SUM(points)
FROM pts
WHERE status = 0
AND user_id = 1
AND time >= "THIS DAY'S 03:00" AND <= "THIS DAY'S 06:00"
),
(
SELECT SUM(points)
FROM pts
WHERE status = 0
AND user_id = 1
AND time >= "THIS DAY'S 06:00" AND <= "THIS DAY'S 09:00"
),
(
SELECT SUM(points)
FROM pts
WHERE status = 0
AND user_id = 1
AND time >= "THIS DAY'S 12:00" AND <= "THIS DAY'S 15:00"
),
"ETC......"
FROM pts
WHERE user_id = 1
AND status = 1
"
所以基本上查询需要在当天每 3 小时从数据库中收集一次数据(所以如果我使用上述选项,它将是 8 个子查询)。此外,如果间隔内尚未达到当前时间,则查询应返回 0 / null。如果当前时间在其中一个区间内,则它应该返回从区间开始到区间结束的数据。
我想要达到的结果:
id user_id points time
1 1 0 2014-08-23 00:00:00 - 2014-08-23 03:00:00
2 1 200 2014-08-23 03:00:00 - 2014-08-23 06:00:00
3 1 300 2014-08-23 06:00:00 - 2014-08-23 09:00:00
4 1 0 2014-08-23 09:00:00 - 2014-08-23 12:00:00
5 1 0 2014-08-23 12:00:00 - 2014-08-23 15:00:00
6 1 300 2014-08-23 15:00:00 - 2014-08-23 18:00:00
7 1 0 2014-08-23 18:00:00 - 2014-08-23 21:00:00
8 1 200 2014-08-23 21:00:00 - 2014-08-23 00:00:00
这可以用 MySQL 实现吗?
【问题讨论】: