Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Oracle]Запрос по условию данных в строках таблицы 
:(
    Опции темы
ALARMus
Дата 28.5.2012, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.1.2012

Репутация: нет
Всего: нет



Здравствуйте.
Помогите, имеется всего одна таблица(Table1) и надо выбрать из нее данные(строки) по следующему условию.

Варианты комбинаций значений:
__Date0_________Date1_______Date2
Значение0_____Значение1___Значение2
Значение0_______NULL_____Значение2
Значение0_______NULL________NULL

Отобрать из таблицы те записи, у которых:

В Date0 "Значение0" (оно есть всегда) менее заданной даты Х1
И
у которых в Date1 есть Значение1 и оно больше заданной даты Х2
И
Если в Date1 значение NULL, но есть значение в Date2 и оно больше той же заданной даты Х2
И
те строки значения у которых и в Date1 и в Date2 равно NULL
PM MAIL   Вверх
password
Дата 28.5.2012, 23:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.9.2008
Где: Украина, Сумы

Репутация: 3
Всего: 8



Это четыре разных задания? или одно с 4-м условиями?
Если одно с 4-мя условиями, то некоторые условия противоречат друг другу, и результат будет нулевым. Возможно вы имели ввиду условие "ИЛИ", а не "И" 

???

для условия или, пример ниже:

Код

with table1 as
(select to_date('01.01.2012','dd.mm.yyyy') Date0, to_date('01.06.2012','dd.mm.yyyy') Date1, to_date('01.03.2012','dd.mm.yyyy') Date2 from dual
union all
 select to_date('01.12.2011','dd.mm.yyyy') Date0, null Date1, to_date('01.05.2012','dd.mm.yyyy') Date2 from dual
union all
select to_date('12.12.2012','dd.mm.yyyy') Date0, null Date1, null Date2 from dual
)

select * from table1
where Date0<to_date('01.05.2012','dd.mm.yyyy') 
    or Date1>to_date('01.04.2012','dd.mm.yyyy')
    or (Date1 is null and  Date2>to_date('01.04.2012','dd.mm.yyyy'))
    or (Date1 is null and  Date2 is null)

PM MAIL Skype   Вверх
ALARMus
Дата 29.5.2012, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.1.2012

Репутация: нет
Всего: нет



Спасибо за ответ.

Когда я писал И - я имел ввиду, что результат должен содержать сумму всех этих условий (И те что содержат значение в Date1 И те, что содержат в Date1 NULL, а в  Date2 есть значение И те строки в которых в Date1, Date2 содержится NULL)

Еще я не упомянул это Oracle (11g)

Подскажите, в первых 3-х селектах, что за даты проставлены ?

[Date0 у меня ограничивается <('2.04.12 17:29:00', 'DD.MM.YY HH24:MI:SS'), а Date1, Date2 - >('2.04.12 17:30:00', 'DD.MM.YY HH24:MI:SS')
И вот то, что выделено жирным я меняю, чтобы получать данные с определенной даты, т.е. обе одновременно 2.04, 3.04, 4.04,..., до сегодняшнего дня
в идеале если можно сразу формировать таблицу в одной колонке дата (та что в условиях для Datex), а во второй количество записей на эту дату по тем условиям отбора]

Это сообщение отредактировал(а) ALARMus - 29.5.2012, 08:54
PM MAIL   Вверх
password
Дата 29.5.2012, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.9.2008
Где: Украина, Сумы

Репутация: 3
Всего: 8



Код

Подскажите, в первых 3-х селектах, что за даты проставлены ?


Просто табличка для примера, даты взяты произвольно.

Это сообщение отредактировал(а) password - 29.5.2012, 09:07
PM MAIL Skype   Вверх
ALARMus
Дата 29.5.2012, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.1.2012

Репутация: нет
Всего: нет



Аааа, это просто заполнение данными.

А сам запрос с 9-й строки ?
PM MAIL   Вверх
Zloxa
Дата 29.5.2012, 11:46 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(password @  29.5.2012,  00:41 Найти цитируемый пост)
to_date('01.05.2012','dd.mm.yyyy') 

типа не замечание, но просто поумничать.  smile 
С десятой версии введены литералы, то же самое теперь можно набирать меньшебуквами
Код

date '2012-05-01'

smile


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ALARMus
Дата 29.5.2012, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.1.2012

Репутация: нет
Всего: нет



Может все же тогда вот так ?

Код

select * from table1
where Date0<to_date('01.05.2012','dd.mm.yyyy') 
AND
(
Date1>to_date('01.04.2012','dd.mm.yyyy')
    or 
(Date1 is null and  Date2>to_date('01.04.2012','dd.mm.yyyy'))
    or 
(Date1 is null and  Date2 is null)
)


Так как надо все те у которых Date0 меньше заданной даты и среди них только те у которых... (далее те ветвления по условию)

Это сообщение отредактировал(а) ALARMus - 29.5.2012, 14:23
PM MAIL   Вверх
password
Дата 29.5.2012, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.9.2008
Где: Украина, Сумы

Репутация: 3
Всего: 8



Код

Zloxa:
С десятой версии введены литералы, то же самое теперь можно набирать меньшебуквами


Спасибо, теперь буду в курсе  smile 

Код

ALARMus:
Может все же тогда вот так ?


Вам виднее... По первоначальному условию у Вас там вообще везде .AND., если вы понимаете условие так - то так оно и есть...
PM MAIL Skype   Вверх
ALARMus
Дата 30.5.2012, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.1.2012

Репутация: нет
Всего: нет



Ну там у меня не везде AND smile 
У меня там не в буленовских терминах , а по "бытовому\человечьи" описано
Поэтому там и стоит включить в отчет И этот список И этот,... - как бы постановка задачи, а не готовые операторы

Это сообщение отредактировал(а) ALARMus - 30.5.2012, 17:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0696 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.