我在一个有一百万条记录的数据库里寻找模式。我用keras和tensorflow做了一些实验,特别是lstm,
然而,由于我在这一领域还很新,所以我在做一些非常具体的查询时发现了更好的结果。
下表包含以下数据:
round value class creacion
1 15.49 H 2018-01-27 14:03:54
2 7.42 H 2018-01-27 14:04:42
3 1.04 L 2018-01-27 14:39:28
4 2.71 H 2018-01-27 14:39:36
5 1.95 L 2018-01-27 14:39:59
6 4 H 2018-01-27 14:40:17
7 4.4 H 2018-01-27 14:40:45
8 1.52 L 2018-01-27 14:41:14
9 28.69 H 2018-01-27 14:41:28
10 7.44 H 2018-01-27 14:42:25
11 1.1 L 2018-01-27 14:43:02
12 1.1 L 2018-01-27 14:43:12
13 1.41 L 2018-01-27 14:43:21
14 1.04 L 2018-01-27 14:53:10
15 1.66 L 2018-01-27 14:53:19
16 8.44 H 2018-01-27 14:53:34
17 1.55 L 2018-01-27 14:54:13
18 2.39 H 2018-01-27 14:55:29
19 2.9 H 2018-01-27 14:55:50
20 1.66 L 2018-01-27 14:56:13
21 2.7 H 2018-01-27 14:56:29
22 7.53 H 2018-01-27 14:56:51
23 2.04 H 2018-01-27 14:57:28
24 1.97 L 2018-01-27 14:57:47
25 1.35 L 2018-01-27 14:58:05
如您所见,我将所有小于2的值分类为“l”(低)值,而大于2的值分类为“h”(高)值。
所以这里的主要目标是预测下一个值。
我一直在使用这个查询,它对100个值求和,认为高值是2,低值是1。下面的查询对最后100个结果求和,并提供一个数字作为输出,假设该数字低于中间值,我们可以预测出现高值的可能性会增加。
SELECT SUM(n)
FROM (
SELECT *, IF(value < 2, @nvalue := 1, @nvalue := 2) AS n
FROM crawler
ORDER BY round DESC
LIMIT 0, 100
) AS sub
所以,第一个问题是关于查询:
我想创建一个新的列,添加前100个值的总和。你知道怎么做吗?
我可以通过以下查询复制结果:
SELECT round, value, class, creacion, sum(n)
FROM (
SELECT *, if(value < 2, @nvalue := 1, @nvalue := 2) AS n
FROM crawler
ORDER BY round DESC
LIMIT 0, 100
) AS sub
但是,它显然只显示最后一条记录:
round value class creacion sum(n)
560894 3.24 hi 2018-06-22 22:58:59 162
当我实际上在寻找相同的结果时,但是每个记录都有一个限制,以避免加载时间过长。
1条答案
按热度按时间m528fe3b1#
获取最后100个值的简单方法是:
因为correlation子句有两层,所以mysql不接受这种情况。
在mysql 8+中,这要简单得多:
在这一点上,我可能建议您切换到mysql 8或其他数据库(如postgres)。在mysql的旧版本中,让您想要的查询在一百万行上高效工作可能不值得。