Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите создать запрос sql / 12 сообщений из 12, страница 1 из 1
28.03.2016, 12:47
    #39201988
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
Добрый день форумчане!
У меня стоит задача создать сложный запрос.
Есть три таблицы в одном базе (table1, table2, table3).

Поля table1:
userid, eventdate, readerid

Поля table2:
userid, firstname, lastname, departmentid

Поля table3:
departmentid, departmentname

Требуется вытащить данные например в Datagridview в таком виде:
firstname, lastname, departmentname, eventdate ("Вход внутрь"), readerid ("Головной офис"), eventdate ("Выход наружу"), readerid ("Пожарный выход 1")

Это система контроля доступа у нас в офисе стоит и требуют отчеты у нас начальство, кто входил, кто выходил за определенный промежуток времени. Вложении есть рисунок примерный вид отчета.
В table1 хранятся все события которые были фиксированные турникетами.
...
Рейтинг: 0 / 0
28.03.2016, 15:28
    #39202226
Помогите создать запрос sql
natsad, ничего сложного тут нет, читайте про объединение таблиц в запросе select.
...
Рейтинг: 0 / 0
28.03.2016, 17:48
    #39202407
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
Я уже пробывал с JOIN -ами , в принципе объединял. Но распределять входы и выходы в одной строке не смог. Если есть идеи пожалуйста поделитесь.
...
Рейтинг: 0 / 0
28.03.2016, 18:09
    #39202431
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
Тебе просто нужны две копии таблицы событий. Из одной бери входы, из второй выходы.
Заодно обдумай, что будешь делать, если у тебя идут подряд два входа или два выхода - стопудово рабочий момент.
...
Рейтинг: 0 / 0
28.03.2016, 18:20
    #39202441
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
уже так делал на две таблицы, в одном вытащил входы а в другом выходы. А в третьей хотел распределять эти входы и выходы.
Но получалось подругому,
Вот так бы хотел получить таблицу:
Например человек вошел 8 утра, но вышел не по турникету, затем вошел в 10:15, затем вышел в 12:30.
----Имя----|----Фамилия----|----Отдел----|----Вход----|----Ридерайди----|----Выход----|----Ридерайди----|
---Иван----|----Иванов-----|---- ТБ -------|---08:30---|---Головной офис-|---00:00------|------------------|
---Иван----|----Иванов-----|-----ТБ-------|---10:15----|--Головной офис--|---12:30------|--Пожарный выход1---|
...
Рейтинг: 0 / 0
29.03.2016, 04:22
    #39202656
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
natsad,

Имеется ли отдельная таблица ридерИД
где указан тип ридера вход или выход?
каким образом извесно что "Пожарный Выход 1"
принадлежит зданию "Головной Офисе"?

Задача решается примерно так:

1. данные делятся по userid.

2 для каждого userид данные сортируются по времени и
пронумеровываются. СМотрите ФАК топик 7488722

3. каждая запись соединяется со следуюшей по порядковому номеру,
путем JOIN самой на себя по условию T1.nomer = T2.nomer + 1


4. каждая пара является "полной" если выполняется:
4.1. у пары одинаковый юзер
4.2. первая запись это вход а вторая -- выход
4.3 оба ридера принадлежат одному зданию

4. полные пары получают новое поле статус=1,
неполные пары получают статус=0

5. Для конечного результата выбираем UNION из двух выборок:
5.1. все полные пары (статус=1)
5.2 все записи из оригинальной таблицы которы не являются
входом или выходом для полных пар
...
Рейтинг: 0 / 0
29.03.2016, 05:28
    #39202660
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
javajdbc,
А можешь написать по техническими элементами типа select from и т.д.
Времена входов и выходов копятся в таблице table1:
Времена это - колонка eventdate
Турникеты это - колонка readerid.
А в колонку readerid попадают integer значения:
1) входы - 1,3,7,9,12
2) выходы - 2,4,8,10,11
Эти все колонки в table1.

И этот момент не понял, уточни пожалуйста:
3. каждая запись соединяется со следуюшей по порядковому номеру,
путем JOIN самой на себя по условию T1.nomer = T2.nomer + 1
...
Рейтинг: 0 / 0
29.03.2016, 06:32
    #39202666
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
natsadjavajdbc,
А можешь написать по техническими элементами типа select from и т.д.
Времена входов и выходов копятся в таблице table1:
Времена это - колонка eventdate
Турникеты это - колонка readerid.
А в колонку readerid попадают integer значения:
1) входы - 1,3,7,9,12
2) выходы - 2,4,8,10,11
Эти все колонки в table1.

И этот момент не понял, уточни пожалуйста:
3. каждая запись соединяется со следуюшей по порядковому номеру,
путем JOIN самой на себя по условию T1.nomer = T2.nomer + 1


1. нужна информация принадлежности конкретного входа или выхода
к зданию. Или подразумевает что в здании ОДИН вход и ОДИН выход и они
записаны строго в последовательные пары: 1,2 вход-выход одного здания,
3,4 -- вход выход другово здания.... так или нет?


2. после того как КАЖДАЯ запись в таблице получит
последовательный порядковый номер 1,2,3,4....
надо будет сформировать пары:

Код: sql
1.
2.
3.
4.
5.
select *
from 
  T as T1 
  left join T as T2 
  ON T1.nomer = T2.nomer - 1




...ну а затем проверка на валидность пары по указаным условиям...


3. Что бы не мучастя strоить один СКЛ, можно сделать
по шагам.... типа create table step1 as select....
...
Рейтинг: 0 / 0
29.03.2016, 06:55
    #39202676
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
1) Здесь никакой роли не играет здание, главное тут ридеры (то есть считыватели при поднесении магнитной карточки срабатывает).

a) Турникет 1 вход - айди ридера 1
b) Турникет 1 выход - айди ридера 2
c) Пожарный выход 2 вход - айди ридера 7
d) Пожарный выход 2 выход - айди ридера 8
e) Пожарный выход 1 вход - айди ридера 9
f) Пожарный выход 1 выход - айди ридера 10
g) Турникет 3 вход - айди ридера 12
h) Турникет 3 выход - айди ридера 11

Считыватели начиная с а) до f) - они находятся в Головном офисе.
Считыватели g) и h) находятся в здании Айша (в другом здании).

А если там встречаются например сотрудник зашел 3 раза подряд и вышел тока после третьего входа. Как в этом случае быть?
Или наоборот, сотрудник зашел не по карточке (просто охраник открыл турникет через кнопку).
...
Рейтинг: 0 / 0
29.03.2016, 14:45
    #39203267
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
>> Считыватели начиная с а) до f) - они находятся в Головном офисе.
>> Считыватели g) и h) находятся в здании Айша (в другом здании).

почему вас надо третий раз спрашивать ГДЕ
хранится информация связи ридер-здание ?

>> А если там встречаются например сотрудник зашел
>> 3 раза подряд и вышел тока после третьего входа.
>> Как в этом случае быть?
>> Или наоборот, сотрудник зашел не по карточке
>> (просто охраник открыл турникет через кнопку).[/quote]

Это вопросы к постановщику задачи.
Отработайте все возможные варианты на Екселе и создайте
список правил вывода информации.

1.
...
Рейтинг: 0 / 0
29.03.2016, 18:02
    #39203506
natsad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
javajdbc,

Получилось у меня сделать задачу как надо, Большое спасибо тебе javajdbc за советы они помогли мне.
...
Рейтинг: 0 / 0
29.03.2016, 19:09
    #39203584
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос sql
natsadjavajdbc,

Получилось у меня сделать задачу как надо, Большое спасибо тебе javajdbc за советы они помогли мне.

:-)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите создать запрос sql / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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