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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2016, 07:53   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Должно быть в результирующем датасете такое поле. Значит не правильно обращаешься к нему.
Цитата:
AND login.login_id = login.login_id
Что за ноу хау?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.03.2016, 08:52   #12
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
но если хочу прочитать из query поле fio, выдает ошибку что такого поля нет(((
так его надо указать в списке выбора
Код:
select ..., mt.fio
........
left join ... as mt ......
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 30.03.2016, 09:14   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Оно есть там
Цитата:
'ORDER BY logout.date_log) AS log_out, mac, mt.family as fio '+
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.03.2016, 09:42   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Аватар, Вы ошибаетесь!
Указание поля в классе ORDER BY не добавляет его в результирующую выборку!
Просто выборка будет по этому полю (в том числе по этому) отсортирована.
Нужно добавить поле в SELECT
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2016, 09:46   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Оно и так в селект. Ордер бай то конец вложенного запроса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.03.2016, 10:05   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Оно и так в селект. Ордер бай то конец вложенного запроса
простите, не вижу.
ткните меня носом, пожалуйста:

Цитата:
Сообщение от dima1208
Код:
rep_query:='SELECT login_id, login.date_log as log_in, '+             //(всех из базы за период)
             '(select top 1 date_log from log_table as logout '+
             'where logout.log_state = ''OUT'' '+
             'AND logout.date_log > login.date_log '+
             'AND logout.login_id = login.login_id '+

             'ORDER BY logout.date_log) AS log_out, mac, mt.family as fio '+
             'FROM log_table as login '+
             'LEFT JOIN main_table mt ON login.login_id = mt.login '+

             'WHERE login.log_state = ''IN'' '+
             'AND login.date_log >= '''+DateToStr(DateTimePicker1.Date)+''''+
             ' AND login.date_log <= '''+datetostr(DateTimePicker2.Date+1)+''''+
             'AND login.login_id = login.login_id ';
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2016, 10:17   #17
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

Цитата:
//(всех из базы за период)
Вообще диапазоны принято выделять через BETWEEN

https://msdn.microsoft.com/ru-ru/lib...=sql.120).aspx
netpolice вне форума Ответить с цитированием
Старый 30.03.2016, 10:28   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Серж
В таком виде, а то в коде ТС черт ногу сломает
Код:
SELECT login_id, login.date_log as log_in,
    (select top 1 date_log
       from log_table as logout
       where logout.log_state = 'OUT'
             AND logout.date_log > login.date_log
             AND logout.login_id = login.login_id
       ORDER BY logout.date_log) AS log_out,
    mac, mt.family as fio
  FROM log_table as login
    LEFT JOIN main_table mt ON login.login_id = mt.login
  WHERE login.log_state = 'IN'
        AND login.date_log >= '01.01.2001'
        AND login.date_log <= '01.10.2001'
        AND login.login_id = login.login_id
Цитата:
Вообще диапазоны принято выделять через BETWEEN
Не прокатит, если в date_log еще и время есть. Если без времени, то конечно BETWEEN оптимальней
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 30.03.2016 в 10:36.
Аватар вне форума Ответить с цитированием
Старый 30.03.2016, 10:35   #19
netpolice
Форумчанин
 
Аватар для netpolice
 
Регистрация: 14.02.2013
Сообщений: 222
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не прокатит, если в date_log еще и время есть. Если без времени, то конечно BETWEEN оптимальней
Разве? Вроде же фактически сравнивание происходит двух переменных real, хотя в ms возможно, уж жуткое представление у даты/тайма в драйвере mssql

Цитата:
Запрос извлекает ожидаемые строки, так как значения даты в запросе и значения типа datetime, хранящиеся в столбце RateChangeDate, были заданы без указания времени. Если время не указано, по умолчанию оно принимается равным 0:00. Обратите внимание, что строка, время в которой позднее 12:00. 05.01.2002, не будет возвращена данным запросом, так как она находится за пределами диапазона.
Вообще мелкомягкие пишут, что время учитывается

Последний раз редактировалось netpolice; 30.03.2016 в 10:39.
netpolice вне форума Ответить с цитированием
Старый 30.03.2016, 10:42   #20
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Допустим выбрать за период от 01.01.2001 по 01.10.2001 включительно и есть время. Тогда условие примерно такое
Код:
where date_log>='01.01.2001' and date_log<'01.11.2001'
Если такое условие
Код:
where date_log BETWEEN '01.01.2001' and '01.10.2001'
то в результат не попадут данные за 01.10.2001
Если такое условие
Код:
where date_log BETWEEN '01.01.2001' and '01.11.2001'
то в результат попадет и 01.11.2001 00:00:00

Если такое условие
Код:
where date_log BETWEEN '01.01.2001 00:00:00' and '01.10.2001 23:59:59'
то в результат могут не попасть данные с временем 23:59:59.123
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 30.03.2016 в 10:47.
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа записи DVD на основе данных MS SQL (15 000) acetgi Фриланс 4 20.12.2013 09:43
не работает поиск по бд Access на основе sql приложение написано в delphi Elizaveta007 БД в Delphi 4 19.08.2013 10:10
Организация одноноправленного списка на основе рекурсивных типов данных в виде стека [Delphi] Kristina93 Помощь студентам 0 31.12.2012 21:41
Задачи: Сортировка символьной информации в строке, заданной пользователем.; Чтение и запись данных в файл (Assembler,TASM) User22 Помощь студентам 2 01.12.2011 11:40
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15