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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2009, 22:12   #1
SoMaL
 
Регистрация: 21.01.2009
Сообщений: 8
По умолчанию Определение статуса

Всем доброго времени суток!!!
Есть таблица под названием ServiceOrders, где храниться информация о том какой абонент в какое время какую услугу заказал или отключил.


Number Connect/DisconnectTime ServiceId Event

80632505249 16.03.2007 00:00:00 3 Connect

80632505249 17.03.2007 00:00:00 3 Disconnect

80632505249 18.03.2007 00:00:00 1 Connect

80632505249 16.04.2007 00:00:00 3 Connect

80632505249 17.04.2007 00:00:00 3 Disconnect

80635636837 15.03.2007 00:00:00 2 Connect

80635636837 17.03.2007 00:00:00 1 Connect


Необходимо создать такой запрос, который выводил бы последние по времени статус ServiceId для каждого или отдельного номера. Тоесть


Number Connect/DisconnectTime ServiceId Event

80632505249 18.03.2007 00:00:00 1 Connect

80632505249 17.04.2007 00:00:00 3 Disconnect

80635636837 15.03.2007 00:00:00 2 Connect

80635636837 17.03.2007 00:00:00 1 Connect


За ранее огромное спасибо!

Последний раз редактировалось SoMaL; 13.03.2009 в 22:15.
SoMaL вне форума Ответить с цитированием
Старый 13.03.2009, 22:34   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, и где ваши собственные наброски?
mihali4 вне форума Ответить с цитированием
Старый 13.03.2009, 23:35   #3
SoMaL
 
Регистрация: 21.01.2009
Сообщений: 8
По умолчанию

Я думал над этим так (например, для номера 80632505249):
сначала нужно выбрать по номеру неповторяемый список ServiceId


Код:
select distinct ServiceId
  from ServiceOrders
 where Number = 80632505249

потом получить максимальною дату по каждой ServiceId, но как это сделать не знаю. Пишу код

Код:
select max([Connect/DisconnectTime])
  from ServiceOrders
 where ServiceId in (
    select distinct ServiceId
      from ServiceOrders
     where Number = 80632505249) and Number = 80632505249

но получаю только
2007-04-17 00:00:00.000
и это понятно почему.

а хотелось бы
2007-03-18 00:00:00.000
2007-04-17 00:00:00.000

после чего, я спокойно мог би получить то, что мне нужно - для выбраного мной номера последний по времени Event по каждой ServiceId, которую "использовал" этот номер.

Но никак не пойму, что мне делать...
SoMaL вне форума Ответить с цитированием
Старый 14.03.2009, 06:35   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вам надо получить информацию с максимальной датой по каждому номеру или каждый номер + ServiceId ??
Цитата:
80632505249 18.03.2007 00:00:00 1 Connect
80632505249 17.04.2007 00:00:00 3 Disconnect
вот, например, из Вашего же примера, надо получить для номера 80632505249 одну строчку (где "17.04.2007 00:00:00 3 Disconnect") или две - одна с ServiceId = 1, другая — ServiceId = 3 ?
Предполагаю, что нужно получить ОДНУ запись с максимальной датой по номеру...
тогда так:

Код:
SELECT * FROM ServiceOrders SO, 
  (SELECT max([Connect/DisconnectTime]) as MaxDT, 
       Number as MaxNumber 
    from ServiceOrders 
    GROUP BY Number) MaxTable
WHERE SO.Number = MaxTable.MaxNumber
  and SO.[Connect/DisconnectTime]= MaxTable.MaxDT
Внимание! Вы не указали Вашу СУБД. да и пишу прямо здесь, на форуме - поэтому, из запроса Вам надо взять идею - синтаксис подправите под Вашу СУБД...

p.s. поля у Вас называются просто БЕЗОБРАЗНО

ДОБАВЛЕНО.
ещё раз перечитал пост... похоже, я ошибся в своём предположении!
Вам надо найти максимальную дату не по номеру, а по ServiceId ??????
вот, к примеру. у Вас есть данные из поста 1
Результатом какие строчки будут??

p.p.s. Если Вас по ServiceId интересуют данные, то во внутреннем запросе замените "Number" на "ServiceID", ну и связь по WHERE соответственно измените...

Последний раз редактировалось Serge_Bliznykov; 14.03.2009 в 06:41.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.03.2009, 15:44   #5
SoMaL
 
Регистрация: 21.01.2009
Сообщений: 8
По умолчанию

А как Вы предлагаете назвать поля?
SoMaL вне форума Ответить с цитированием
Старый 15.03.2009, 16:52   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А как Вы предлагаете назвать поля?
ну хотя бы без совпадений с ключевыми словами (вместо Number - например, PhoneNumber или TelNum или Abonent_Phone_Nomer или... - продолжать?.. )
и начинающиеся с английской буковки и ТОЛЬКО с использованием английских букв, цифр и знака подчёркивания (ну, классические требования к идентификатору в ЯП)...
поверьте мне, подобные отступление от правил именования может быть и не скажется... а может привести к сложно диагностируемым глюкам...
Оно того стоит?!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
qip, изменение статуса программно DeDoK Общие вопросы Delphi 6 13.11.2008 13:33
Определение IP IvanLex HTML и CSS 6 28.03.2008 07:46
Определение IP IvanLex Общие вопросы по Java, Java SE, Kotlin 1 19.02.2008 09:12
Определение IP RKS Работа с сетью в Delphi 3 13.12.2007 15:43