我遇到了一个相当奇怪的问题。我有以下示例数据可以在 mysql 数据库中使用:
|钥匙| 数据| 索引 | 总计| 时间戳 | | # | 一个 | 1 | 2 | 2009-01-02 01:01:32 | | $ | 乙 | 2 | 2 | 2009-01-02 01:03:32 | | % | c | 1 | 3 | 2009-01-03 01:01:32 | | ^ | d | 2 | 3 | 2009-01-03 01:04:32 | | & | 电子| 3 | 3 | 2009-01-03 01:02:32 | | * | f | 1 | 2 | 2009-01-05 01:01:32 |
发生的事情是另一个进程(不受我控制)正在接收数据包,并将它们直接存储到数据库中,并带有到达时间的时间戳。数据包应该以突发形式到达...... a,b 将彼此靠近并被索引为 1 和 2,每个数据包包含传输的数据包的“总数”。key 是一个普通的自增主键。
我需要的是一个视图,它将显示最近到达的列表(部分列表,如果不是所有的数据包都已经到达,是可以接受的)。
对于上述查询,理想情况下结果应该只是“f”,但我没有看到这样做的方法。如果我们不能以其他方式得到它,返回“a”和“f”是可以接受的。换句话说,select 语句捕获的少量额外数据并不是什么大问题。对于“f”到达之前的时间段,正确的返回是 c、d 和 e。
我的一般想法是这样的:
SELECT * FROM 表 WHERE 总计 = ( SELECT total FROM table WHERE timestamp = ( 从表中选择 MAX(时间戳) ) ) ORDER BY DESC 时间戳 限制 ( SELECT total FROM table WHERE timestamp = ( 从表中选择 MAX(时间戳) )
正如你们中的一些人可能已经注意到的那样,您不能在 LIMIT 子句中执行子查询(至少对于 mysql)。有没有人有另一种方法来解决这个问题?通过将 JOIN 嵌套到最近 id 的小列表中,可以使上面的查询更加清晰,但这仍然会在子查询中留下 LIMIT 子查询问题。
作为一个两阶段查询,这是相对微不足道的。问题是它需要成为 VIEW 的定义选择语句。
编辑以修复错误的 sql 示例