|
Как выбрать первый приход и последний уход?
|
|||
---|---|---|---|
#18+
Приветствую. Использую PostgreSQL 10. Есть таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
event_type - это тип события, а именно 1 = приход на работу, 2 = уход. Требуется выбрать за заданный период, для заданных firm_id и employee_id : 1) время первого прихода и последнего ухода каждый день; 2) время нахождения на работе (каждый день), которое равно промежутку времени первого прихода и последнего ухода. Если в промежутке сотрудник уходил, это время нужно вычесть. Подскажите, можно ли решить данную задачу только средствам БД, если да то как? Или лучше выбирать промежутки, а подсчёт делать в приложении? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2020, 19:35 |
|
Как выбрать первый приход и последний уход?
|
|||
---|---|---|---|
#18+
Victor256, а если человек пришел сегодня, а ушел уже завтра? Или пришел, но не ушел. Или умудрился уйти не приходя? Средствами БД задачу решить можно, в случае полноты и непротиворечивости данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 09:51 |
|
Как выбрать первый приход и последний уход?
|
|||
---|---|---|---|
#18+
Щукина Анна, да, всякое может быть, в т.ч. и несколько входов/выходов подряд, например. Значит, буду делать в приложении. Спасибо за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 12:10 |
|
Как выбрать первый приход и последний уход?
|
|||
---|---|---|---|
#18+
Это можно сделать и в базе, проблема только в корректной и полной постановке задачи. Предоставьте тестовые данные и ожидаемый ответ. Вам все равно потребуется это сделать вне зависимости от того, где вы хотите подготовить отчет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2020, 00:58 |
|
Как выбрать первый приход и последний уход?
|
|||
---|---|---|---|
#18+
Victor256, Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Код: sql 1.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 15:05 |
|
Как выбрать первый приход и последний уход?
|
|||
---|---|---|---|
#18+
nedba, Отлично, спасибо! Буду изучать и внедрять ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:15 |
|
Как выбрать первый приход и последний уход?
|
|||
---|---|---|---|
#18+
предыдущий и мой вариант без учета выходов "на перекур" Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 13:35 |
|
Как выбрать первый приход и последний уход?
|
|||
---|---|---|---|
#18+
Victor256, у нас это сделано средствами бд в хранимке, на вход подается поток событий код сотрудника; дата время; код турникета; направление турникеты сгруппированы в периметры охраны, периметры охраны могут быть вложенными (цод внутри здания) после загрузки событий они сортиуются по сотруднику и по времени, и читаются последовательно. При чтении вход группируется с выходом образую проход который записывается в отдельную таблицу. Если есть только выход то в большенстве случаев вход проставляется по графику, но запись помечается как не достоверная, то же самое с выходом, если вход был на одной площадке выход на другой то создается два прохода один на весь период другой с нулевой продолжительностью, оба помечаются как не достоверные. Так же внесено понятие максимальная продолжительность дня, если время прохода больше нее то запись делится на две с восстановлением по графику, обе записи не достоверные. Сбор отчета уже идет по готовой таблице. При этом есть две колонки достоверное и не достоверное время. Если у руководства возникают вопросы прикладывают логи проходов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 14:10 |
|
|
start [/forum/topic.php?fid=53&fpage=31&tid=1994809]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 173ms |
0 / 0 |