|
Запрос
|
|||
---|---|---|---|
#18+
Есть такая таблица 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] ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2003, 13:08 |
|
Запрос
|
|||
---|---|---|---|
#18+
Как я понимаю это должно быть что-то вида: select id, max(Function(data, tim)) group id где Function некая функция собирающая полную дату из дат и времени. Что это за функция я, честно говоря не знаю - пусть подскажут специалисты, но даже если такой нет - можно написать udf. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2003, 18:50 |
|
Запрос
|
|||
---|---|---|---|
#18+
полную дату со времянем можно получить сложением переменных Data+tim ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2003, 03:25 |
|
Запрос
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6.
Можно cast((a.DATA||' '||a.TIM) as timestamp). Вернет а) null (если все VALL is null) б) одно значение (если максимальные DATA и TIM уникальны), в) набор значений (если максимальные DATA и TIM неуникальны) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2003, 09:44 |
|
Запрос
|
|||
---|---|---|---|
#18+
Пардон по поводу "Можно cast((a.DATA||' '||a.TIM) as timestamp" : Можно cast(cast(a.DATA as date)||' '||a.TIM as timestamp) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2003, 10:00 |
|
Запрос
|
|||
---|---|---|---|
#18+
сорри, господа насколько я помню и насколько я делал оператор || означает сложение строк и все.... а дату со времянем можно и нужно складывать оператором + ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2003, 10:06 |
|
Запрос
|
|||
---|---|---|---|
#18+
- 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' и для поиска максимального подходит, но 'т.е. можно' мне теперь кажется так и нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2003, 10:44 |
|
Запрос
|
|||
---|---|---|---|
#18+
Вопрос несколько в другом. Если убрать из таблицы время и ориентироваться только на дату. Предположим поля TIM вообще в таблице нет. Как составить такой запрос, результатом которого будет ID, максимальная дата и соответствующее ей VALL. Запрос должен возвращать все ID и максимальная дата для каждого ID может отличаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2003, 13:49 |
|
|
start [/forum/topic.php?fid=40&fpage=527&tid=1580875]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 294ms |
total: | 431ms |
0 / 0 |