2 回答
TA贡献1848条经验 获得超6个赞
如果您正在运行 MySQL 8.0,则可以直接使用窗口函数lead():
select
t.*,
(value - lead(value) over(order by id) > 0) is_greater
from mytable t
这为您提供了一个名为 的布尔标志is_greater,具有以下可能值:
1: 这个值大于下一个
0: 这个值小于下一个
null: 没有下一个值
DB Fiddle 上的演示:
身份证 | 价值 | 更伟大
-: | ----: | ---------:
1 | 700 | 1
2 | 600 | 0
3 | 800 | 0
4 | 900 | 无效的
在早期版本中,一种选择是使用相关子查询:
select
t.*,
(value - (
select t1.value
from mytable t1
where t1.id > t.id
order by t1.id limit 1
) > 0) is_greater
from mytable t
TA贡献1943条经验 获得超7个赞
您只需要记住前一行并在下一次迭代中使用它,假装它是当前行,而当前行将用作下一行。
$row = null;
while($row_next = $stmt->fetch(PDO::FETCH_ASSOC)) {
if ($row !== null)) {
$id = $row["ID"];
$val_current = $row["VALUE"];
$val_next = $row_next["VALUE"];
if ($val_current > $val_next){
echo "$id is greater!";
}else{
echo "$id is less!";
}
echo "\n";
}
$row = $row_next;
}
- 2 回答
- 0 关注
- 102 浏览
添加回答
举报