Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос / 8 сообщений из 8, страница 1 из 1
10.02.2003, 13:08
    #32103816
gray_k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Есть такая таблица
id integer noit null,
data timestamp not null,
tim varchar(5) not null,
vall integer
primary key(id, data, tim)
В поле DATA хранится только дата без времени
Необходимо в запросе выбрать последнее введённое значение VALL для всех ID, т.е. где VALL is not NULL, а DATA и TIM максимальные. TIM - это время ('22:00' например). При определении максимального TIM можно использовать сравнение строк, т.е. время в таблице вводится только такое, что сравнение строковых и числовых значений даёт одинаковый результат. [src][/src]
...
Рейтинг: 0 / 0
10.02.2003, 18:50
    #32104164
Осирис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Как я понимаю это должно быть что-то вида:

select id, max(Function(data, tim))
group id

где Function некая функция собирающая полную дату из дат и времени.

Что это за функция я, честно говоря не знаю - пусть подскажут специалисты, но даже если такой нет - можно написать udf.
...
Рейтинг: 0 / 0
11.02.2003, 03:25
    #32104250
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
полную дату со времянем можно получить сложением переменных Data+tim
...
Рейтинг: 0 / 0
11.02.2003, 09:44
    #32104329
Acue
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
select a.VALL
  from YOUR_TABLE a
 where a.VALL is not null and
       a.DATA||a.TIM=(select max(b.DATA||b.TIM)
                        from YOUR_TABLE b
                        where b.VALL is not null)

Можно cast((a.DATA||' '||a.TIM) as timestamp).
Вернет
а) null (если все VALL is null)
б) одно значение (если максимальные DATA и TIM уникальны),
в) набор значений (если максимальные DATA и TIM неуникальны)
...
Рейтинг: 0 / 0
11.02.2003, 10:00
    #32104341
Acue
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Пардон по поводу
"Можно cast((a.DATA||' '||a.TIM) as timestamp" :
Можно cast(cast(a.DATA as date)||' '||a.TIM as timestamp)
...
Рейтинг: 0 / 0
11.02.2003, 10:06
    #32104345
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
сорри, господа насколько я помню и насколько я делал оператор || означает сложение строк и все.... а дату со времянем можно и нужно складывать оператором +
...
Рейтинг: 0 / 0
11.02.2003, 10:44
    #32104367
Acue
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
- Data Definition Guide - Specifying Datatypes - Converting datatypes

InterBase either automatically converts the data to an equivalent datatype(an implicit type conversion), or you can use the CAST() function in search сonditions to explicitly translate one datatype into another for comparison purposes.

Из условий: data timestamp , tim varchar(5)

cast('01.01.2000' as timestamp)+'12:00' - Error
cast('01.01.2000' as timestamp)+cast('12:00' as time) - Error
cast('01.01.2000' as date)+'12:00' - Error
cast('01.01.2000' as date)+cast('12:00' as time) - Ok

т.е. можно cast(a.DATA as date)+cast(a.TIM as time)

a.DATA||a.TIM возвращает строку (если в timestamp-е только дата): '2000-01-01 00:00:00.000012:00' и для поиска максимального подходит, но 'т.е. можно' мне теперь кажется так и нужно
...
Рейтинг: 0 / 0
11.02.2003, 13:49
    #32104518
gray_k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос
Вопрос несколько в другом. Если убрать из таблицы время и ориентироваться только на дату. Предположим поля TIM вообще в таблице нет. Как составить такой запрос, результатом которого будет ID, максимальная дата и соответствующее ей VALL. Запрос должен возвращать все ID и максимальная дата для каждого ID может отличаться.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]