Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Привет, помогите, пожалуйста, написать запрос: Есть таблица с порядковыми номерами. Некоторые номера отсуствуют. Их нужно выбрать. Большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:41 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, в общем случае из базы можно выбрать лишь то, что присутствует. а чего отсутствует - то выбрать нельзя. можно только сгенерировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:44 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101 Есть таблица с порядковыми номерами. Некоторые номера отсуствуют. Их нужно выбрать. Большое спасибо. Делаешь селект с сортировкой по порядковому номеру, и потом где-то в цикле при переборе записей, если разница между номерами предыдущей и текущей записи больше 1, выводишь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:50 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, спасибо за быстрый ответ. Тогда как сгенерировать? (по идее, отсутствующий номер можно вычислить: SNR_OUT = SNR_IN + 1)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 11:52 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, спасибо за ответ. Проблема в том, что при 10 миллионах записей переберать их в цикле программы очень долго. Нужно решение методами СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:01 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, положим, в базе будут значения 1 и 1000000. Чего должно быть на выходе? массив данных из 999998 строк со значениями от 2 до 999999 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:04 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101Нужно решение методами СУБД. Сделай хранимую процедуру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:12 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, совершенно верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:32 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, это может быть хорошей идеей - нужно попробовать...ну и научиться это делать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:42 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101Добрый Э - Эх, совершенно верно. оптимальнее будет выводить не 99998 записей в случае пропуска от 2 до 100000, а одну запись с полем start = 3 и полем amount = 99998. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:55 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, в качестве оптимизации [NOT]EXISTS-подзапросов можно воспользоваться [LEFT]JOIN-ом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:56 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, ну или абсолютные значения "начало - кончало" дырок... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 12:58 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
кстати, если прикрутить "переменные" , то, возможно, будет гораздо проще вычислить интервалы дырок... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 13:03 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхкстати, если прикрутить "переменные" , то, возможно, будет гораздо проще вычислить интервалы дырок...хотя нет, соврал... переменные хорошо лягут на обратную задачу - если нужно будет свернуть имеющиесы в таблице непрерывные интервалы до вида: "начало непрерывного интервала - кончало непрерывного интервала"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 13:04 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, спасибо за код. Круто, конечно. Так снаскоку, правда, не заработало. Попробую осмыслить суть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 13:39 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, не заработало молча? или поругалось как-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 13:51 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101DSNT408I SQLCODE = -204, ERROR: QXI7488.T IS AN UNDEFINED NAMEА какая у вас СУБД? судя по найденному в яндексе, это DB2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:14 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101DSNT408I SQLCODE = -204, ERROR: QXI7488.T IS AN UNDEFINED NAMEтут-то как раз все понятно - "Т - неопределенное имя" Или другими словами - "объекта с именем Т в базе не существует" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:30 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, что не по теме, но в базе реально такие названия таблиц и полей? Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:36 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, да, только где у меня в коде такой объект QXI7488.T ? или он динамически генериться ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:37 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, да, все в реале. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:38 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101Добрый Э - Эх, да, только где у меня в коде такой объект QXI7488.T ? или он динамически генериться ?QXI7488 - это, скорее всего, имя схемы, базы данных или че там есть в твоей СУБД... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:43 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101да, только где у меня в коде такой объект QXI7488.T ? from t - вместо t пишешь QXI7488 where t1.n = t0.n + 1 - вместо n пишешь vkda76 Синтаксис SQL совсем не знаешь, возьми книжку какую-нибудь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:43 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, и, кстати, если у тебя и в самом деле DB/2, то свернуть портянку дыр в диапазоны можно гораздо проще, посредством оконных функций [ LEAD | LAG ] OVER() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:45 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallarisfrom t - вместо t пишешь QXI7488 where t1.n = t0.n + 1 - вместо n пишешь vkda76 Хотя если qxi7488 - это не таблица, тогда я не прав ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 14:46 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхкак вариант - начни решать задачу поэтапно. на первом этапе получи все диапазоны "дырок" в виде "начало дыры - кончало дыры" на втором этапе сгенерируй строки от начала до кончала каждой дыры. по итогу, в рамках DB/2 первый этап делаем на LEAD (...) Over(order by ...), второй этап можно сделать на рекурсивном WITH. Но это уже лучше обсуждать в профильной ветке ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 15:04 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, ага, это я затупил. Но названия у схем и таблиц оригинальные, сразу разработчику понятно, что к чему :) Модератор: Тема перенесена из форума "MySQL". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 15:05 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, Добрый день. Для MYTABLE (I INT) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 15:52 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Pallaris, да, это DB2 и SQL Tаблица здесь qxi7488.vkda76 Столбец snr_num но в данном случае методы MySQL должны по идее прокатить в SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 16:50 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Prima_0101, Дело в том, что MySQL-ный диалект SQL-ля сильно скуднее в своих возможностях, чем его DB/2-шный аналог... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 18:15 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, При всем моём уважении, но зачем же генерить весь диапазон значений? Уж лучше делать это именно для дыр. В особенности, если дыр не много и они не сильно широкие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 18:18 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Это самое простое готовое решение, не требующее процедурной логики. Не будет устраивать производительность, можно и другими способами решить. И далеко еще не факт, что эти другие способы будут более производительными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 19:27 |
|
||
|
Как выбрать в таблице отсутствующие номера
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?all=1&fid=43&tid=1600823]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
82ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 9ms |
| total: | 205ms |

| 0 / 0 |
