从N个值中选择具有最低M值的行

时间:2015-10-21 09:11:39

标签: mysql sql

我的表格结构如下:

id   value  hour
1     4      176475
2     2      176475
3     3      176475
4     2      176475
1     2      184563
2     1      184563
3     4      184563
4     3      184563
...   ...    ...
1     2      N
2     3      N
3     1      N
4     4      N

关键属性是将数据拆分为按升序排列的小时数。小时'时间戳被截断以每天强制执行24个桶。我想做几件事:

  • 第一个小时拉出所有行
  • 每个ID超过3小时,8小时...... N小时value秒。

有一种简单的方法吗?我知道我可以使用NTILE来标记数据,但这在Spark中是非常昂贵的操作。

编辑:

汇总小时1-3的预期结果:

id     value
1        9
2        7
3        10
4        8

这些值已经弥补,但我们的想法是在3个小时的每个小时中对ID的值求和,这样我每个ID就有一个值,而不是3个。

1 个答案:

答案 0 :(得分:0)

这是您正在寻找的查询:

SELECT id, SUM(value) as `value`
FROM yourTableHere
WHERE hour between (NOW() - INTERVAL X HOUR) AND NOW()
GROUP BY id, hour

打破查询。

  1. 选择ID并从您的桌面计算value
  2. hour介于X小时前和现在之间。
  3. 在给定时间戳之间按idhour对结果进行分组。
  4. 将X替换为您希望的小时数的1/3/8或更多。