Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите составить запрос / 5 сообщений из 5, страница 1 из 1
09.04.2010, 16:51
    #36571297
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Есть комнаты, которые закрываются на ключ, и люди, у которых находятся эти ключи, по одному на человека.
У каждой комнаты своя нумерация ключей, т.е. ключ идентифицируется номером комнаты и собственным номером.
События «комната закрыта/открыта в такое-то время» пишутся в таблицу. Делаем три таблички:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ROOMS         PERSONS          EVENTS

RoomID        PersonID         EventID
...           RoomID           RoomID
              KeyID            KeyID
              PersonName       EventType
              ...              EventTime
Допустим, нужно вытащить из БД, кто и когда последний раз открыл/закрыл комнату с номером id:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT FIRST  1 
  E.EventTime, P.PersonName
FROM
  EVENTS E
LEFT OUTER JOIN
  PERSONS P
ON
  (P.RoomID=E.RoomID) and (P.KeyID=E.KeyID)
WHERE
  E.RoomID=:id
ORDER BY E.EventID DESC
Вопрос такой: как выглядит запрос, получающий эту же информацию для всех записей из таблицы ROOMS?
...
Рейтинг: 0 / 0
09.04.2010, 16:56
    #36571314
Gwa
Gwa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
RWolf, нужно как минимум знать что за БД
...
Рейтинг: 0 / 0
09.04.2010, 17:07
    #36571344
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Gwa,
Firebird 1.5.6
...
Рейтинг: 0 / 0
09.04.2010, 17:18
    #36571391
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
  E.EventTime, P.PersonName
FROM
(SELECT MAX(E.EventTime) MTime,
E.RoomID RoomID
FROM EVENTS E
GROUP BY E.RoomID) T
INNER JOIN EVENTS E
ON (E.EventTime=T.MTime) AND (E.RoomID=T.RoomID)
LEFT JOIN PERSONS P
ON (P.RoomID=E.RoomID) and (P.KeyID=E.KeyID)
С уважением, Naf
...
Рейтинг: 0 / 0
09.04.2010, 17:26
    #36571411
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос
Naf,
да, в сторону MAX() я и не посмотрел; спасибо за подсказку!
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите составить запрос / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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