powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / запрос в базе Perco
25 сообщений из 36, страница 1 из 2
запрос в базе Perco
    #38659746
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Такая ситуация: На проходной стоит СКД с базой на скуле. Все события складываются в одну таблицу- где различие между входом и выходом-цифра. Сейчас встал вопрос как получить выборку такого плана: табномер сотрудника, дата входа и дата выхода, например:

сейчас:
111 Иванов 03.06.2014 1(1-признак входа)
111 Иванов 03.06.2014 1(2-признак выхода)
нужно:
111 Иванов 03.06.2014 03.06.2014


это при условии что может быть как вход без выхода так и выход без входа (на машине заехали) так и несколько раз вход и выход за день.

пытаюсь делать так:

select s.last_name,s.first_name,s.middle_name,s.tabel_id,
t.date_pass,t.time_pass,t.type_pass
from tabel_intermediadate t,staff s
where s.id_staff=t.staff_id and s.tabel_id <>''
and t.type_pass in (1,2)

опять же появляются два строчки....что делать?
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38659770
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так, опишу таблицы для удобства:
staff-данные о сотруднике
tabel_intermediadate-события

между собой они связаны по полю staff.id_staff=tabel_intermediadate.staff_id
в tabel_intermediadate есть поле type_pass(1-вход,2-выход)
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38659862
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тильчикs.id_staff=t.staff_id"...чтобы запутать противника!"

Тильчикопять же появляются два строчки....что делать?

Код: sql
1.
2.
3.
4.
5.
6.
7.
select s.last_name,s.first_name,s.middle_name,s.tabel_id,t.date_pass
 ,min(case when t.type_pass=1 then t.time_pass) as time_in
 ,max(case when t.type_pass=2 then t.time_pass) as time_out
from tabel_intermediadate t
join staff s on s.id_staff=t.staff_id 
where s.tabel_id <>''  and t.type_pass in (1,2)
group by 1,2,3,4,5
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38660024
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тильчик решил формально выполнить этикет:)

ЗЫ
хочу сварить суп, пытаюсь делать так - закинул картошку морковку и кусок мяса в кастрюлю, варю - вместо супа получилось 4 свареные картошки, одна марковка, и кусок мяса, что делать?
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38660073
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не канает
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38660077
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453,да, приходится))))в скуле не силен а нужно именно запросом чтобы потом резльтат не обрабатывать...
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38660209
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тильчик,

а что у вас за СУБД?
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38660213
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir
Код: sql
1.
2.
3.
4.
5.
6.
7.
select s.last_name,s.first_name,s.middle_name,s.tabel_id,t.date_pass
 ,min(case when t.type_pass=1 then t.time_pass) as time_in
 ,max(case when t.type_pass=2 then t.time_pass) as time_out
from tabel_intermediadate t
join staff s on s.id_staff=t.staff_id 
where s.tabel_id <>''  and t.type_pass in (1,2)
group by 1,2,3,4,5

Безотносительно логики запроса - case-ы не закрыты.
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38660264
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, птичка, aka firebird

Модератор: Тема перенесена из форума "MySQL".
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38660301
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
недописать "end" это такой хитрый тест для ТС-а на профпригодность? :)
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661029
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
end то я сам написал))) только выполняется долго:(
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661032
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да и выборка неверно работает
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661050
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тильчик,

а что бы тебе помочь нужна DDL таблиц, немного данных и желаемый результат
ЧИТАТЬ__ВСЕМ,__КТО__ПРИШЕЛ__СЮДА__В__ПЕРВЫЙ__РАЗ!
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661108
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тильчик,

держи гранату

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
WITH T AS (
  SELECT
    DISTINCT
    STAFF_ID AS STAFF_ID,
    CASE
      WHEN TYPE_PASS = 1
      THEN DATE_PASS
    END AS DATE_IN,
    CASE
      WHEN LEAD(TYPE_PASS) OVER(PARTITION BY STAFF_ID ORDER BY DATE_PASS) = 2
      THEN LEAD(DATE_PASS) OVER(PARTITION BY STAFF_ID ORDER BY DATE_PASS)
    END AS DATE_OUT
  FROM TABEL_INTERMEDIADATE
  WHERE TYPE_PASS IN (1, 2)
)
SELECT
    S.LAST_NAME,
    S.FIRST_NAME,
    S.MIDDLE_NAME,
    S.TABEL_ID,
    T.DATE_IN,
    T.DATE_OUT
FROM T
   JOIN STAFF S ON S.ID_STAFF = T.STAFF_ID
WHERE S.TABEL_ID <> ''
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661109
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а, нет, вру, все отлично, спасибо
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661110
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тильчик,

вообще то в исходном запросе он покажет первый вход и последний выход. Если промежуточные не нужны то тогда верно
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661175
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

а если несколько раз зашел и вышел?
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661181
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661190
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этот запрос будет работать только в FB 3 и выше. Но он ещё в состоянии пре беты.
Для 2.5 подобное написать будет сложновато, но можно с помощью EXECUTE BLOCK или ХП.
А у вас какая версия?
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661193
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тильчик,

большая просьба перестать сюда фигачить скриншоты IBE. Лучше писать только тексты ошибок
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661195
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

просто хотелось показать на какой строчке ругается, птичка у нас 2.5 стоит
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661203
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

поможешь? очень нужно....
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661206
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тильчик,

ты скажи чего тебе нужно поточнее. Мой запрос вытаскивает на каждый вход выход, если он конечно был.

Вот вариант без оконных функций

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
WITH T AS (
  SELECT
    DISTINCT
    STAFF_ID AS STAFF_ID,
    CASE
      WHEN TYPE_PASS = 1
      THEN DATE_PASS
    END AS DATE_IN,
    (SELECT TI_2.DATE_PASS
     FROM
       TABEL_INTERMEDIADATE TI_2
     WHERE TI_1.STAFF_ID = TI_2.STAFF_ID AND
           TI_2.TYPE_PASS = 2
           TI_2.DATE_PASS >= TI_1.DATE_PASS
     ORDER BY DATE_PASS
     ROWS 1) AS DATE_OUT
  FROM TABEL_INTERMEDIADATE TI_1
  WHERE TYPE_PASS IN (1, 2)
)
SELECT
    S.LAST_NAME,
    S.FIRST_NAME,
    S.MIDDLE_NAME,
    S.TABEL_ID,
    T.DATE_IN,
    T.DATE_OUT
FROM T
   JOIN STAFF S ON S.ID_STAFF = T.STAFF_ID
WHERE S.TABEL_ID <> ''



но он будет не быстрый
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38661214
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
мне нужны данные когда человек зашел и когда вышел учитывая то, что он несколько раз заходил и выходил и может быть такая ситуация что может быть как вход без выхода так и выход без входа
...
Рейтинг: 0 / 0
запрос в базе Perco
    #38662132
Тильчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет ни кого мыслей?
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / запрос в базе Perco
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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