Вывести пропущенные значения

ypur_name
Дата: 26.12.2011 11:04:31
Добрый день!
Имеется задача: Вывести недостающие смены.
Небольшой фрагмент из набора данных.
Smen
00020029_000888_111102
00020029_000889_111103
00020029_000892_111106
00020029_000893_111107
00020029_000896_111110
00020029_000897_111111
00020029_000900_111114
00020029_000901_111115
00020029_000902_111116
00020029_000904_111118
00020029_000907_111121

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

00020029_000890
00020029_000891
00020029_000894
00020029_000895
00020029_000898
00020029_000899
00020029_000903
00020029_000905
00020029_000906
Заранее спасибо !
полином
Дата: 26.12.2011 11:17:29
ypur_name
Заранее спасибо !


а куда вдруг делись:

00020029_000888
00020029_000889
00020029_000907

?
ypur_name
Дата: 26.12.2011 11:21:24
полином,

888 есть в наборе данных, а надо вывести те, которых нет.
Мог написать результат не точно, так как сам.
mds_world
Дата: 26.12.2011 11:32:09
С помощью строчных функций выделить построку со сменами, применить к найденному функцию Val. Сравнить с числовым рядом, полученным с помощью Digits или из таблицы с непрерывным счетчиком.. Все это можно сделать непосредственно в запросе. Но выделение подстроки со сменами лучше вынести в функцию.
ypur_name
Дата: 26.12.2011 11:35:25
mds_world,
а можно поподробней пожалуйста?
я не очень разбираюсь в sql
mds_world
Дата: 26.12.2011 12:14:42
Функция в общем модуле
Public Function NSmena(zap, n)
    If Not IsNull(zap) Then NSmena = Split(zap, "_")(n) Else NSmena = ""
End Function


Запрос
select dg.n
from
(select (D3.digit & D2.digit & D1.digit & D0.digit)+1 AS n from Digits AS D0, Digits AS D1, Digits AS D2, Digits AS D3) as dg
left join (select val(nsmena(txt,1)) as s FROM ypur_name) q on dg.n=q.s
where dg.n between (select min(val(nsmena(txt,1))) from Таблица) and (select max(val(nsmena(txt,1))) from Таблица)
and q.s=0


Запрос Digits здесь 5414410
ypur_name
Дата: 26.12.2011 12:46:17
mds_world,
Спасибо, создал модуль. Создал запрос.
Так же создал запрос Digits с содержанием
SELECT TOP 1 0 AS digit FROM Table_A
UNION All
SELECT TOP 1 1 FROM Table_A
UNION All 
SELECT TOP 1 2 FROM Table_A
UNION All
SELECT TOP 1 3 FROM Table_A
UNION All
SELECT TOP 1 4 FROM Table_A
UNION All
SELECT TOP 1 5 FROM Table_A
UNION All
SELECT TOP 1 6 FROM Table_A
UNION All
SELECT TOP 1 7 FROM Table_A
UNION All
SELECT TOP 1 8 FROM Table_A
UNION ALL SELECT TOP 1 9 FROM Table_A;


при попытке выполнить запрос, выдает поле для ввода, пробовал забивать туда полностью поле, тогда выдает пустоту, если номер смены или число от 0 до 9, то выдает - "Subscript out of range"
mds_world
Дата: 26.12.2011 14:02:38
ypur_name,

покажите ваш запрос
ypur_name
Дата: 26.12.2011 14:45:43
mds_world,

SELECT dg.n
FROM [select (D3.digit & D2.digit & D1.digit & D0.digit)+1 AS n from Digits AS D0, Digits AS D1, Digits AS D2, Digits AS D3]. AS dg LEFT JOIN [select val(nsmena(txt,1)) as s FROM Table_A]. AS q ON dg.n = q.s
WHERE (((dg.n) Between (select min(val(nsmena(txt,1))) from K_1111) And (select max(val(nsmena(txt,1))) from Table_A)) AND ((q.s)=0));
mds_world
Дата: 26.12.2011 15:03:30
ypur_name,

в моем примере txt это ваше текстовое поле. Вместо txt подставьте настоящее имя поля.

Вы же подставили вместо Таблица имя Table_A. Почему же с txt этого не произошло?