我有一张名为“liverace”的表,如下(摘录):
racelap,pos,change,userid
1 1 0 21
1 2 0 12
1 3 0 18
2 1 0 18
2 2 0 21
2 3 0 12
基本上,我有几个圈被列为racelap,其中每个用户(拥有它自己独特的“userid”)获得一个位置(“pos”)取决于一些微积分。 我需要做的是拥有“更改”列,更新每一圈和每个用户以反映位置的变化。 所以我必须比较每一圈和每个用户的每个位置,即它应该显示:
racelap,pos,change,userid
1 1 - 21
1 2 - 12
1 3 - 18
2 1 +2 18
2 2 -1 21
2 3 -1 12
第一圈没有变化,因为第0圈不存在。第2圈是它应该显示位置变化的地方。
我一直在尝试一些选择,但没有任何效果。 提前谢谢!
答案 0 :(得分:2)
SELECT
so1.`lap`,
so1.`pos`,
COALESCE(so2.pos - so1.pos, "-") as `change`,
so1.user_id
FROM
so so1
LEFT JOIN so so2
ON so2.lap = (so1.`lap` - 1)
AND so2.`user_id` = so1.`user_id`
按预期工作。
lap pos change user_id
------ ------ ------ ---------
1 1 - 21
1 2 - 12
1 3 - 18
2 1 2 18
2 2 -1 21
2 3 -1 12
假设以下
CREATE TABLE `so` (
`lap` int(11) DEFAULT NULL,
`pos` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL
) ENGINE=InnoDB