powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите создать запрос sql
12 сообщений из 12, страница 1 из 1
Помогите создать запрос sql
    #39201988
natsad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день форумчане!
У меня стоит задача создать сложный запрос.
Есть три таблицы в одном базе (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
Помогите создать запрос sql
    #39202226
natsad, ничего сложного тут нет, читайте про объединение таблиц в запросе select.
...
Рейтинг: 0 / 0
Помогите создать запрос sql
    #39202407
natsad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я уже пробывал с JOIN -ами , в принципе объединял. Но распределять входы и выходы в одной строке не смог. Если есть идеи пожалуйста поделитесь.
...
Рейтинг: 0 / 0
Помогите создать запрос sql
    #39202431
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе просто нужны две копии таблицы событий. Из одной бери входы, из второй выходы.
Заодно обдумай, что будешь делать, если у тебя идут подряд два входа или два выхода - стопудово рабочий момент.
...
Рейтинг: 0 / 0
Помогите создать запрос sql
    #39202441
natsad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже так делал на две таблицы, в одном вытащил входы а в другом выходы. А в третьей хотел распределять эти входы и выходы.
Но получалось подругому,
Вот так бы хотел получить таблицу:
Например человек вошел 8 утра, но вышел не по турникету, затем вошел в 10:15, затем вышел в 12:30.
----Имя----|----Фамилия----|----Отдел----|----Вход----|----Ридерайди----|----Выход----|----Ридерайди----|
---Иван----|----Иванов-----|---- ТБ -------|---08:30---|---Головной офис-|---00:00------|------------------|
---Иван----|----Иванов-----|-----ТБ-------|---10:15----|--Головной офис--|---12:30------|--Пожарный выход1---|
...
Рейтинг: 0 / 0
Помогите создать запрос sql
    #39202656
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите создать запрос sql
    #39202660
natsad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Помогите создать запрос sql
    #39202666
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите создать запрос sql
    #39202676
natsad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Помогите создать запрос sql
    #39203267
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Считыватели начиная с а) до f) - они находятся в Головном офисе.
>> Считыватели g) и h) находятся в здании Айша (в другом здании).

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

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

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

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

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

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

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


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