Текущее время: Чт, июл 31 2025, 14:41

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Непонятно как составить select...
СообщениеДобавлено: Чт, июл 23 2009, 11:34 
Начинающий
Начинающий

Зарегистрирован:
Пт, июл 10 2009, 07:32
Сообщения: 11
Пол: Мужской
Общий случай: есть прозрачная таблица для определения некой величины в зависимости от даты.
Состоит из двух полей: BEGIN_DATE -тип = дата (первичный ключ) и VAL -значение произвольного типа, неважно какого.
Задача - на произвольную заданную дату определить запись в таблице для которой заданная дата была бы больше или равна BEGIN_DATE.
Для следующей записи таблицы BEGIN_DATE будет уже БОЛЬШЕ заданной... Надеюсь, смысл представления данных понятен.

Вопрос - как написать select для получения значения по заданной дате? Ничего внятного в голову не приходит..(((
Разумеется, можно не заморачиваться и добавить в прозрачную таблицу поле END_DATE и получить "полноценное" определение периода действия для которой нет никаких проблем с писанием селектов.. но не хочется лишних полей..


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Непонятно как составить select...
СообщениеДобавлено: Чт, июл 23 2009, 11:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Code:
SELECT *
UP TO 1 ROWS
FROM table
WHERE begin_date >= s_date
ORDER BY begin_date.

ENDSELECT.

_________________
С уважением,
Удав.


Последний раз редактировалось Удав Чт, июл 23 2009, 11:48, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятно как составить select...
СообщениеДобавлено: Чт, июл 23 2009, 11:47 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Code:
SELECT MIN(begin_date) FROM table WHERE begin_date GE date.

Если я правильно понял поток мысли.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Непонятно как составить select...
СообщениеДобавлено: Чт, июл 23 2009, 14:43 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, окт 26 2006, 15:07
Сообщения: 227
и еще немного изврата ...
Code:
SELECT SINGLE  * from  table
WHERE begin_date IN (SELECT MIN(begin_date) FROM table WHERE begin_date GE date).


Не проверял


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятно как составить select...
СообщениеДобавлено: Чт, июл 23 2009, 19:58 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Insect написал:
Разумеется, можно не заморачиваться и добавить в прозрачную таблицу поле END_DATE и получить "полноценное" определение периода действия для которой нет никаких проблем с писанием селектов.. но не хочется лишних полей..

IMHO это классический случай, когда экономия места в базе только выходит лишним геморроем при составлении запросов. Если я правильно поняла, то в базе могут быть, например, следующие записи:

1/1/2007
1/1/2008
1/1/2009
1/1/2010

Запись, которая действительна, например, на 2/1/2009 - это та, где BEGIN_DATE = 1/1/2009. Но если вы будете делать SELECT WHERE BEGIN_DATE <= 2/1/2009, то потянутся записи и за 2007-2008. Т.о. нужно, во-первых, выбрать записи, где BEGIN_DATE <= 2/1/2009, а, во-вторых, из этих записей выбрать ту, где дата максимальна (т.е. 1/1/2009). Это можно сделать либо с помощью SELECT в таблицу + сортировка DESCENDING, либо subquery, по типу как matel предложил, только по-другому немного (это фрагмент, синтаксис надо будет поправить, естественно):

Code:
SELECT MAX(BEGIN_DATE) WHERE BEGIN_DATE IN (SELECT WHERE BEGIN_DATE <= 2/1/2009).


Оба варианта не идеальны, поэтому я бы на вашем месте лучше добавила END_DATE. Не случайно стандартные таблицы, где встречаются периоды, в основном так и построены.

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятно как составить select...
СообщениеДобавлено: Пт, июл 24 2009, 05:51 
Начинающий
Начинающий

Зарегистрирован:
Пт, июл 10 2009, 07:32
Сообщения: 11
Пол: Мужской
Jelena написала:
я бы на вашем месте лучше добавила END_DATE. Не случайно стандартные таблицы, где встречаются периоды, в основном так и построены.


Спасибо всем за ответы. Собственно, так я вчера и сделал - добавил дату конца периода и все дела.

Что касается использования только одной даты для задания периода действия некоего значения, то она очень легко решалась в рамках xbase-технологии, которая в общем-то не совсем в рамках sql-идеологии работы с таблицами данных.
Получается, фишка в том, что в данном случае выбор той или иной записи зависит не только от содержимого ИСКОМОЙ записи, но и от содержания ДРУГИХ записей sql-таблицы. А энто уже не есть хорошо для писания select'ов.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB