![]() |
|
Модераторы: LSD |
![]()
|
|
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Есть таблица (log-файл)
структура: 2 поля - дата и текс. DATE, TEXT Нужно показать все записи SELECT * FROM LOG; но есть одно ограничение. За каждую дату есть несколько таких записей. Показывать нужно только одну из них. То есть одни сутки - одна строка. Как мне осуществить проверку, что в следующей строке дата равна текущей? Пример 01.04.2005 тра-та-та 01.04.2005 три рубля 02.04.2005 куку-руку 02.04.2005 бла-бла Получить нужно 01.04.2005 тра-та-та 02.04.2005 куку-руку или 01.04.2005 три рубля 02.04.2005 бла-бла Не должно быть дублирование суток. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
GROUP BY `date`
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
В догонку. А как определить, что после текущей записи дата не +1, а +2 или больше.
|
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Разницу между датами в записях? ИМХО, это уже не на уровне СУБД придется делать. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Нет, не разница между датами.
Например SELECT DATE,DATE+1 FROM LOG; мне вернет 01.04.2005 02.04.2005 Допустим я хочу добавить на выходе еще колонку, гле будет ставиться флаг того, что после данной строки есть пробел в датах. Могу я как-то обратиться в своем запросе для проверки следующей по порядку строки? Если DATE следующей строки не равно DATEтекущей+1, то в третий столбец выставить флаг. |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: нет Всего: 55 |
Возможно это можно описать с помощью вложенных SELECT. Но, я думаю что это будет очень не эффективно. Я бы сделал это на уровне программы. Хотя, ... Может есть и другие решения. -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Вложенные селекты это не очень эффективно для большой базы.
Я и сам могу сложить селект на селекте. Но хотелось бы что-то пограмотнее. Просто до этого работал не с реляционными базами. Получить такой запрос в привычной мне системе это дело 2-х секунд. Поэтому при работе с SQL у меня возникает нездоровый вопрос% неужели в одном SELECT запросе я не могу обратиться для проверки поля следующего за проверяемым. Решение крутится на кончике языка, и я уверен, что это просто. Но мои знания SQL на уровне основных стандартов. Но я не верю, что на SQL невозможно реализовать такое простое решение. Всего-то нужно проверить запись следующюю за current. Неужели SQL недостаточно мощное средство для этого. Я не верю. |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: нет Всего: 55 |
Увы, придется поверить. SQL орентирован на реляционные отношения, а там нет понятий "следующий", "предыдущий", "текущий", и т.п.
-------------------- Все знать невозможно, но хочется |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Тут весь камень приткновения в том, что этот флаг ты должен установить в начале запроса, т.е. SELECT ..... FROM... А сортировка делается только уже после выборки... Т.е. к результатам отсортированным в запросе ты обратиться не можешь. разве что на некоторых СУБД через вложенные процедуры можно реализовать. Ты с чем работаешь? |
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
У меня база и так отсортирована. Сортируй не сортируй... Порядок остается прежним.
Oracle8 Не хочется использовать вложенный селект. Но попробую хоть в эту сторону. |
||||
|
|||||
| igon |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 3 Всего: 21 |
Используй Self Join
Для таблицы
такой запрос
покажет в поле NextDate dateof+1 только для тех записей, у которых она существует. Для остальных - Null. Чем не флаг? Проверял на 9i -------------------- Хотите поговорить об этом? |
||||
|
|||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |