我有一个具有此结构的表和一些示例值:
ID | created | value | person
1 | 1 | 5 | 1
2 | 2 | 2 | 2
3 | 3 | 3 | 3
4 | 4 | 5 | 1
5 | 5 | 1 | 2
6 | 6 | 32 | 3
7 | 7 | 9 | 1
8 | 8 | 34 | 2
10 | 9 | 25 | 3
11 | 11 | 53 | 1
12 | 12 | 52 | 2
13 | 13 | 15 | 3
... etc
创建的列将具有时间戳。即像“1555073978”这样的数字。我只是增量来证明时间戳很少会相同。
因此,每个人都有创建时间存储的值。每分钟都会添加值。一周后,这张桌子很大。因此,当我进行查询以绘制图形时,PHP运行内存不足,因为数据集非常庞大。
所以我正在寻找的是一种简单的方法来对这样的表进行查询,这样我就能以较小的间隔得到值。
我如何查询此表,以便得到: - 每个区间每人只有一个值 - 其中间隔应为15分钟,30分钟,60分钟等(即查询中的参数)
我已经开始采用一种方法,但不想花太多时间,以防我错过了一种更简单的方法。我的方法是将时间戳转换为YEAR-MONTH-DAY-HOUR,但这只适用于每小时。我也在努力确保查询返回该小时的最近条目PER PERSON。
任何帮助将不胜感激。
假设您创建的列是时间戳,并且您希望每15分钟可以尝试一次最大值
select person, max(value)
from my_table
group by person, FLOOR(UNIX_TIMESTAMP(created )/(15 * 60))
但如果你不需要unix_timestamp
然后
group by person, FLOOR(created /(15 * 60))
如果你想要人和间隔的最新值,那么你可以使用
select * from my_table m
inner join (
select person, max(created) max_created
from my_table
group by person, FLOOR(UNIX_TIMESTAMP(created )/(15 * 60))
) t on t.person = m.person and t.max_created = m.created