Найти два последовательных ряда - PullRequest
5 голосов
/ 24 сентября 2008

Я пытаюсь написать запрос, который будет извлекать две последние строки из таблицы Билла, где установлен флаг Estimated. Загвоздка в том, что это должны быть последовательные счета.

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

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

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

В таблице есть столбец 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 будут последовательными.

Ответы [ 4 ]

11 голосов
/ 24 сентября 2008

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

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
2 голосов
/ 24 сентября 2008
select top 2 * 
from bills
where estimated = 1 
order by billdate desc
0 голосов
/ 24 сентября 2008

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

0 голосов
/ 24 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...