|
|
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Привет, помогите, пожалуйста, написать запрос: Есть таблица с порядковыми номерами. Некоторые номера отсуствуют. Их нужно выбрать. Большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:41:56 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, в общем случае из базы можно выбрать лишь то, что присутствует. а чего отсутствует - то выбрать нельзя. можно только сгенерировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:44:17 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101 Есть таблица с порядковыми номерами. Некоторые номера отсуствуют. Их нужно выбрать. Большое спасибо. Делаешь селект с сортировкой по порядковому номеру, и потом где-то в цикле при переборе записей, если разница между номерами предыдущей и текущей записи больше 1, выводишь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:50:20 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, спасибо за быстрый ответ. Тогда как сгенерировать? (по идее, отсутствующий номер можно вычислить: SNR_OUT = SNR_IN + 1)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:52:00 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, спасибо за ответ. Проблема в том, что при 10 миллионах записей переберать их в цикле программы очень долго. Нужно решение методами СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:01:10 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, положим, в базе будут значения 1 и 1000000. Чего должно быть на выходе? массив данных из 999998 строк со значениями от 2 до 999999 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:04:02 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101Нужно решение методами СУБД. Сделай хранимую процедуру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:12:52 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, совершенно верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:32:49 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, это может быть хорошей идеей - нужно попробовать...ну и научиться это делать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:42:21 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, как вариант - начни решать задачу поэтапно. на первом этапе получи все диапазоны "дырок" в виде "начало дыры - кончало дыры" на втором этапе сгенерируй строки от начала до кончала каждой дыры. Примерно таким запросом можно поискать дырки (исходная таблица - t, поле с нумерацией - n. замени их на свои названия): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:55:35 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101Добрый Э - Эх, совершенно верно. оптимальнее будет выводить не 99998 записей в случае пропуска от 2 до 100000, а одну запись с полем start = 3 и полем amount = 99998. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:55:46 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, в качестве оптимизации [NOT]EXISTS-подзапросов можно воспользоваться [LEFT]JOIN-ом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:56:54 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, ну или абсолютные значения "начало - кончало" дырок... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:58:04 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
кстати, если прикрутить "переменные" , то, возможно, будет гораздо проще вычислить интервалы дырок... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 13:03:17 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхкстати, если прикрутить "переменные" , то, возможно, будет гораздо проще вычислить интервалы дырок...хотя нет, соврал... переменные хорошо лягут на обратную задачу - если нужно будет свернуть имеющиесы в таблице непрерывные интервалы до вида: "начало непрерывного интервала - кончало непрерывного интервала"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 13:04:51 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, спасибо за код. Круто, конечно. Так снаскоку, правда, не заработало. Попробую осмыслить суть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 13:39:51 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, не заработало молча? или поругалось как-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 13:51:21 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, тупо подставила в код свои таблицы и свои поля select hb as hb, min(he) as he from ( select snr_num +1 as hb from qxi7488.vkda76 t0 where not exists(select null from qxi7488.vkda76 t1 where t1.snr_num = t0.snr_num + 1) and exists(select null from qxi7488.vkda76 t1 where t1.snr_num > t0.snr_num) ) v_b join ( select n - 1 as he from t t0 where not exists(select null from qxi7488.vkda76 t1 where t1.snr_num = t0.snr_num - 1) and exists(select null from qxi7488.vkda76 t1 where t1.snr_num < t0.snr_num) ) v_e on hb <= he group by hb order by 1 Выдало непонятно что: DSNT408I SQLCODE = -204, ERROR: QXI7488.T IS AN UNDEFINED NAME ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:07:25 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, тупо подставила в код свои таблицы и свои поля: select hb as hb, min(he) as he from ( select snr_num +1 as hb from qxi7488.vkda76 t0 where not exists(select null from qxi7488.vkda76 t1 where t1.snr_num = t0.snr_num + 1) and exists(select null from qxi7488.vkda76 t1 where t1.snr_num > t0.snr_num) ) v_b join ( select n - 1 as he from t t0 where not exists(select null from qxi7488.vkda76 t1 where t1.snr_num = t0.snr_num - 1) and exists(select null from qxi7488.vkda76 t1 where t1.snr_num < t0.snr_num) ) v_e on hb <= he group by hb order by 1 Выдало непонятно что: DSNT408I SQLCODE = -204, ERROR: QXI7488.T IS AN UNDEFINED NAME ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:10:29 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101DSNT408I SQLCODE = -204, ERROR: QXI7488.T IS AN UNDEFINED NAMEА какая у вас СУБД? судя по найденному в яндексе, это DB2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:14:18 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101тупо подставила в код свои таблицы и свои поля:не до подставляла. менять нужно было всё выделенное: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:28:45 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101DSNT408I SQLCODE = -204, ERROR: QXI7488.T IS AN UNDEFINED NAMEтут-то как раз все понятно - "Т - неопределенное имя" Или другими словами - "объекта с именем Т в базе не существует" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:30:43 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, что не по теме, но в базе реально такие названия таблиц и полей? Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:36:47 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, да, только где у меня в коде такой объект QXI7488.T ? или он динамически генериться ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:37:49 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, да, все в реале. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:38:53 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101Добрый Э - Эх, да, только где у меня в коде такой объект QXI7488.T ? или он динамически генериться ?QXI7488 - это, скорее всего, имя схемы, базы данных или че там есть в твоей СУБД... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:43:24 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101да, только где у меня в коде такой объект QXI7488.T ? from t - вместо t пишешь QXI7488 where t1.n = t0.n + 1 - вместо n пишешь vkda76 Синтаксис SQL совсем не знаешь, возьми книжку какую-нибудь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:43:39 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, и, кстати, если у тебя и в самом деле DB/2, то свернуть портянку дыр в диапазоны можно гораздо проще, посредством оконных функций [ LEAD | LAG ] OVER() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:45:18 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallarisfrom t - вместо t пишешь QXI7488 where t1.n = t0.n + 1 - вместо n пишешь vkda76 Хотя если qxi7488 - это не таблица, тогда я не прав ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:46:25 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
PallarisPallarisfrom t - вместо t пишешь QXI7488 where t1.n = t0.n + 1 - вместо n пишешь vkda76 Хотя если qxi7488 - это не таблица, тогда я не правQXI7488 - это имя схемы данных. что-то типа аналога "базы данных". то есть в рамках одной общей базы в DB/2 могут быть разные схемы данных. такие своеобразные "логические контейнеры" для объектов отдельно-взятой системы - таблиц, индексов, процедур, функций и т.д. и т.п.. Если запрашиваем объекты текущей схемы, имя схемы можно не писать (просто пишем select * from T). если хотим обратиться к объектам другой схемы, то требуется указывать перед именем таблицы имя этой схемы (select * from QXI7488.T)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:56:11 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхкак вариант - начни решать задачу поэтапно. на первом этапе получи все диапазоны "дырок" в виде "начало дыры - кончало дыры" на втором этапе сгенерируй строки от начала до кончала каждой дыры. по итогу, в рамках DB/2 первый этап делаем на LEAD (...) Over(order by ...), второй этап можно сделать на рекурсивном WITH. Но это уже лучше обсуждать в профильной ветке ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 15:04:13 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, ага, это я затупил. Но названия у схем и таблиц оригинальные, сразу разработчику понятно, что к чему :) Модератор: Тема перенесена из форума "MySQL". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 15:05:28 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, Добрый день. Для MYTABLE (I INT) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 15:52:12 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, да, это DB2 и SQL Tаблица здесь qxi7488.vkda76 Столбец snr_num но в данном случае методы MySQL должны по идее прокатить в SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 16:50:48 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, Дело в том, что MySQL-ный диалект SQL-ля сильно скуднее в своих возможностях, чем его DB/2-шный аналог... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 18:15:40 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, При всем моём уважении, но зачем же генерить весь диапазон значений? Уж лучше делать это именно для дыр. В особенности, если дыр не много и они не сильно широкие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 18:18:45 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Это самое простое готовое решение, не требующее процедурной логики. Не будет устраивать производительность, можно и другими способами решить. И далеко еще не факт, что эти другие способы будут более производительными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 19:27:46 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Друзья, всем большое спасибо за участие и помощь. пока решили воспользоваться тривиальными методами: - находить первую дырку SELECT (SNR_NUM +1) AS SNR_NUM_NEU FROM QXI7488.VKDA76 A AND NOT EXISTS (SELECT * FROM QXI7488.VKDA76 B WHERE B.SNR_NUM = A.SNR_NUM + 1 ) FETCH FIRST ROW ONLY - потом находим конец дырки - потом в программе в цикле генерим недостающие номера На досуге можно будет порассуждать о предложенных вами более красивых решениях. Всем большое спасибо и хорошего дня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 12:52:03 |
|
||
|
|

start [/forum/topic.php?all=1&fid=43&tid=1600823]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 485ms |

| 0 / 0 |
