Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Нестандартный вывод записей из таблицы

Ответить
Настройки темы
MySQL - Нестандартный вывод записей из таблицы

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Доброго дня.
Заранее благодарен всем, кто сможет помочьsmile Уже 2 неделю бьюсь над задачей. Буду благодарен за любую мысльsmile
Есть таблица с записями вида

HTML код: Выделить весь код
day id_work count 20130326 1 2 20130327 1 4 20130328 1 2 20130329 1 0 20130330 1 2 20130331 1 3 20130401 1 2 20130402 1 2 20130403 1 1

таких записей очень много. Примерная задача: надо найти варианты 4-дневных диапазонов, в которых count выше 0, т.е. нужен запрос, который вывел бы из данных данной таблицы такое:

HTML код: Выделить весь код
day1 day2 id_work 20130330 20130402 1 20130331 20130403 1

А при 3-дневном диапазоне такие варианты:

HTML код: Выделить весь код
day1 day2 id_work 20130326 20130328 1 20130330 20130401 1 20130331 20130402 1 20130401 20130403 1

Принцип работы запроса. Скажем нужны 3-дневные диапазоны.

Берет первую запись 20130326, смотрит - count больше 0, это 1 день диапазона. Далее берет следующую запись 20130327, смотрит - count больше 0. Это 2 день диапазона. Далее берет следующую запись 20130328, смотрит - count больше 0. Это 3 день диапазона. 3 дня есть, то выводим

HTML код: Выделить весь код
20130326 20130327 1

Далее уже начинаем с записи 20130327. Берет первую запись 20130327, смотрит - count больше 0, это 1 день диапазона. Далее берет следующую запись 20130328, смотрит - count больше 0. Это 2 день диапазона. Далее берет следующую запись 20130329, смотрит - ага, count равен 0. Все это диапазон уже не нужно выводить.

Далее уже начинаем с записи 20130328. Берет первую запись 20130328, смотрит - count больше 0, это 1 день диапазона. Далее берет следующую запись 20130329, смотрит - ага, count равен 0. Это диапазон уже не нужно выводить.

И так далее. Тут без переменных и вложенных запросов никак. Уже весь мозг себе сломал)) Возможно ли организовать запрос, который бы сделал нужные выводы? Спасибо.

P.S. Прощу прощения, если неправильно выразил задачу, ещё не все возможности MySQL изучил В голове все перемешалось. Заранее спасибо, всем кто даже прочтет.

Отправлено: 14:40, 18-03-2013

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


ponigrom@vk, первая мысль -- никак. Дело в том что SQL системы работают по другим принципам, нежели "обычная". Реляционная алгебра дает в ответ множество. Как обрабатывать это множество -- задача программиста конечной системы.
Перебор кортежей (записей таблицы) циклом for губителен для производительности базы данных.
ИМХО, получив такую таблицу, ее надо уже обсчитывать в какой-либо иной системе. perl как текст, python как кортежи, С++, C#, Delphi как массив и т.д. и т.п.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:49, 18-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Не, я конечно могу предложить адский вариант, который ломает мозг и скорее всего не работает

Этим мы выбираем 3 первых записи где count больше нуля
Код: Выделить весь код
1. Select top 3 * from table where count >0 order by day1
А вот тут аццкий запрос мозголомам.
Код: Выделить весь код
2. Select top 3 * from table where count >0 and day1 not in (Select top 3 day1 from table where count >0)
Если я верно понимаю, сначала выполнится подзапрос, который вернет 3 строки(как в первом запросе). А потом уже выполнится основной, который вернет следующие 3 строки.
Хотя мне кажется, что я ошибаюсь, но проверить можно

А вообще lxa85 прав, делать такую задачу на чистом SQL - самоубийство. Гораздо быстрее и проще обработать это каким либо языком программирования.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 17:09, 18-03-2013 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Нестандартный вывод записей из таблицы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.NET - Вставка записей в DBF таблицы LilLoco Программирование и базы данных 2 24-06-2011 07:31
[решено] Вывод таблицы БД в обратном порядке binders Вебмастеру 4 21-10-2010 08:37
Удаление записей из таблицы по заданному времени на php magwolf Вебмастеру 5 14-08-2009 14:13
Mysql Выбор записей + к каждой count из другой таблицы benya Вебмастеру 11 26-05-2006 18:27
Удаление записей из таблицы MySQL unknown Вебмастеру 3 21-05-2003 14:54




 
Переход