Текущее время: Ср, июл 30 2025, 17:34

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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