Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2012, 08:40   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вы бы разобрались как работает в MySQL вычитание TIMESTAMP из TIMESTAMP. Из примера видно, что при вычитании из большего меньшего все Ok, а вот наоборот не ожидаемый минус, а что-то типа алгебраического дополнения, что конечно не устроит. Так что сортирует все правильно, а вот как разницу определить нормально - это вопрос. Я бы попробовал заменить
Код:
ABS(TIMESTAMP(`data`,`time`)-TIMESTAMP('2012-07-01 00:00:00'))
на
Код:
IF(TIMESTAMP(`data`,`time`)>TIMESTAMP('2012-07-01 00:00:00'),TIMESTAMP(`data`,`time`)-TIMESTAMP('2012-07-01 00:00:00'),TIMESTAMP('2012-07-01 00:00:00')-TIMESTAMP(`data`,`time`))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.07.2012, 09:15   #12
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

ага, понял. мне надо что бы функция вернула время в формате time тогда его легче будет сортировать как число. из справки по mysql нашёл функцию
Цитата:
TIMEDIFF() returns expr1 – expr2 expressed as a time value. expr1 and expr2 are time or date-and-time expressions, but both must be of the same type.

The result returned by TIMEDIFF() is limited to the range allowed for TIME values.
и всё вроде заработало.
Код:
SELECT abs(TIMEDIFF(TIMESTAMP(`data`,`time`),TIMESTAMP('2012-07-01 00:00:00'))) AS Delta,
       TIMESTAMP(`data`,`time`), val 
  FROM `arhiv`.`kod_48`
  where kod=48 and unitnum=514 and id_param=101 and
        TIMESTAMP(`data`,`time`) BETWEEN TIMESTAMP('2012-06-30 23:45:00') AND TIMESTAMP('2012-07-01 00:15:00')
  ORDER BY Delta
  LIMIT 10
результат
'58.000000', '2012-06-30 23:59:02', '2954.92'
'721.000000', '2012-07-01 00:07:21', '2955.08'
'916.000000', '2012-06-30 23:50:44', '2954.76'

или для лимита 1
'58.000000', '2012-06-30 23:59:02', '2954.92'

в общем что и требовалось для задачи. опять же очень удобный запрос получился тем, что можно любой интервал сюда воткнуть для определённой даты. да вот ещё вопрос как можно получить из другой таблицы kod,unitnum, id_param, зная поле label если структура таблицы
kod,unitnum, id_param, label (тип varchar),Vrema(тип varchar).

что бы получился всего один запрос а не 2. как я хотел делать. вроде как то через join делать надо. но буду думать. особенность другой таблицы в том что она находиться в другой "банке" `parametrs`.`par_mg`. если сам найду быстрее отпишусь.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi MySQL - криво вводится дата в таблицу. iskurt Помощь студентам 10 13.06.2012 21:00
Дата в mysql Mortimoro PHP 2 18.04.2012 20:45
Ближайшая точка к курсору Claster Помощь студентам 11 27.07.2011 17:29
Вычитание дат(дата-дата=кол.дней) zallza Общие вопросы Delphi 1 31.05.2010 22:50
Ближайшая точка к заданной. Язык си MirandaX Помощь студентам 6 26.05.2009 18:25