我需要在nil之前找到获取值的查询。
在我的数据库中,我有一个名为table_number的表。当在代码中进行特定操作时,通常值会在此表中递增1,如此
id, table_number
1 1
2 2
3 3
4 nil
5 nil
6 nil
7 nil
8 nil
9 nil
10 nil
但现在有可能指定特定的记录表编号。所以我的问题是如果已经指定了值,如何保持有罪的值。场景看起来像这样:
id, table_number
1 1
2 2
3 3
4 nil
5 nil
6 nil
7 nil
8 nil
9 6
10 nil
所以我想这里要做的就是获得所有不是nil的值,找到一个增加1的值,如果没有指定值则保持有罪。但是如何做到这一点,所以所有记录的表格都是这样的:
id, table_number
1 1
2 2
3 3
4 4
5 5
6 7
7 8
8 9
9 6
10 10
我正在使用rails,但SQL也没关系:)谢谢
答案 0 :(得分:0)
我无法评论 - 信誉不足 - 但我觉得这个问题可能无法解决,除非你能保证id列总是按正确的升序排列(即使它不是从1开始) - 即使它并不总是上升1)。
如果确实如此,那么也许你可以做到
DECLARE @firstNilId int;
SELECT @firstNilId = MIN(Id)
FROM mytable
WHERE table_number = 'nil'
DECLARE @prevTableNum int;
SELECT TOP 1 @prevTableNum = table_number
FROM mytable
WHERE Id < @firstNilId
ORDER BY Id ASC
UPDATE mytable
SET table_number = @prevTableNum + 1
WHERE Id = @firstNilId
我相信这应该能满足您的需求。请澄清我的任何假设是否不正确。
谢谢, ķ
编辑1:我应该指出我没有测试过这个。只是抛弃那个免责声明。如果有人试图这样做,请分享您的发现。谢谢!