2008-09-24 2 views
5

Я пытаюсь написать запрос, который вытащит две последние строки из таблицы Билла, где установлен флаг «Сметка». Уловка заключается в том, что они должны быть последовательными счетами.Найдите две последовательные строки

Короче говоря, мне нужно ввести строку в другую таблицу, если счет был рассчитан для последних двух циклов счета.

Я бы хотел сделать это без курсора, если это возможно, так как я работаю с большим количеством данных, и это должно выполняться довольно часто.

Редактировать

Существует AUTOINCREMENT (1,1) столбец таблицы. Не выдавая слишком много структуры таблицы, таблица, по существу, из структуры:


CREATE TABLE Bills (
    BillId INT AUTOINCREMENT(1,1,) PRIMARY KEY, 
    Estimated BIT NOT NULL, 
    InvoiceDate DATETIME NOT NULL 
) 

Таким образом, вы могли бы иметь набор результатов, как:

 
BillId    AccountId   Estimated InvoiceDate 
-------------------- -------------------- --------- ----------------------- 
1111196    1234567    1   2008-09-03 00:00:00.000 
1111195    1234567    0   2008-08-06 00:00:00.000 
1111194    1234567    0   2008-07-03 00:00:00.000 
1111193    1234567    0   2008-06-04 00:00:00.000 
1111192    1234567    1   2008-05-05 00:00:00.000 
1111191    1234567    0   2008-04-04 00:00:00.000 
1111190    1234567    1   2008-03-05 00:00:00.000 
1111189    1234567    0   2008-02-05 00:00:00.000 
1111188    1234567    1   2008-01-07 00:00:00.000 
1111187    1234567    1   2007-12-04 00:00:00.000 
1111186    1234567    0   2007-11-01 00:00:00.000 
1111185    1234567    0   2007-10-01 00:00:00.000 
1111184    1234567    1   2007-08-30 00:00:00.000 
1111183    1234567    0   2007-08-01 00:00:00.000 
1111182    1234567    1   2007-07-02 00:00:00.000 
1111181    1234567    0   2007-06-01 00:00:00.000 
1111180    1234567    1   2007-05-02 00:00:00.000 
1111179    1234567    0   2007-03-30 00:00:00.000 
1111178    1234567    1   2007-03-02 00:00:00.000 
1111177    1234567    0   2007-02-01 00:00:00.000 
1111176    1234567    1   2007-01-03 00:00:00.000 
1111175    1234567    0   2006-11-29 00:00:00.000 

В этом случае, только записи 1111188 и 1111187 будет последовательным.

+0

... сделать строки имеют поле ID? – Swati 2008-09-24 12:24:30

+0

Не могли бы вы разместить дополнительную информацию? Возможно выборка данных, чтобы мы могли видеть «последовательные» и «не последовательные» случаи. – 2008-09-24 12:28:18

+0

Как уже отмечалось выше, ответ зависит от того, что вы рассматриваете как «последовательные» строки. Приведу пример. – rslite 2008-09-24 12:34:20

ответ

11

Если предположить, что строки имеют последовательные идентификаторы, что-то вроде этого может быть то, что вы ищете:

select top 1 * 
from 
Bills b1 
inner join Bills b2 on b1.id = b2.id - 1 
where 
b1.IsEstimate = 1 and b2.IsEstimate = 1 
order by 
b1.BillDate desc 
0

Вы должны быть в состоянии сделать descensing отсортированный запрос по оценкам = истинны и выберите верхний 2. Я не лучший в SQL, так что я не могу дать точную языковую структуру

0

У вас есть столбец «номер заявления », например, если Q12008 был заявлением 28 для конкретного клиента, тогда счет Q22008 будет равен 29, счет Q32008 будет равен 30 (при условии ежеквартального выставления счетов). Затем вы можете проверить, что номера операторов смежны, а не делать манипуляции с датами.

2
select top 2 * 
from bills 
where estimated = 1 
order by billdate desc