powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос
8 сообщений из 8, страница 1 из 1
Запрос
    #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
Запрос
    #32104164
Осирис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю это должно быть что-то вида:

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

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

Что это за функция я, честно говоря не знаю - пусть подскажут специалисты, но даже если такой нет - можно написать udf.
...
Рейтинг: 0 / 0
Запрос
    #32104250
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полную дату со времянем можно получить сложением переменных Data+tim
...
Рейтинг: 0 / 0
Запрос
    #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
Запрос
    #32104341
Acue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон по поводу
"Можно cast((a.DATA||' '||a.TIM) as timestamp" :
Можно cast(cast(a.DATA as date)||' '||a.TIM as timestamp)
...
Рейтинг: 0 / 0
Запрос
    #32104345
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, господа насколько я помню и насколько я делал оператор || означает сложение строк и все.... а дату со времянем можно и нужно складывать оператором +
...
Рейтинг: 0 / 0
Запрос
    #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
Запрос
    #32104518
gray_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос несколько в другом. Если убрать из таблицы время и ориентироваться только на дату. Предположим поля TIM вообще в таблице нет. Как составить такой запрос, результатом которого будет ID, максимальная дата и соответствующее ей VALL. Запрос должен возвращать все ID и максимальная дата для каждого ID может отличаться.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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