用于在nil之前获取值的SQL

时间:2015-03-26 11:00:56

标签: sql ruby-on-rails

我需要在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也没关系:)谢谢

1 个答案:

答案 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:我应该指出我没有测试过这个。只是抛弃那个免责声明。如果有人试图这样做,请分享您的发现。谢谢!