|
|
|
Точки перелома сотрудника
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток! Столкнулся с задачей выгрузки истории точек перелома работающего сотрудника (в реальной БД сотрудников очень много и очень много информации по повторным приемам, изменению должностей и переходам по магазинам). И никак не могу понять, как мне убрать лишние строки. Используется 4 таблицы табл1 = za00 - идентификация IDTN табл2 = zaes - информация по приему IDDATENTDATSOR, где DATENT - дата приема, DATSOR - дата увольнения. Если DATSOR = 31.12.2999 - это признак что сотрудник не уволен табл3 = zaem - информация по должности и отделу IDDATXXXDATEFFPROFESOTDEL, где DATEFF - дата должности, PROFES и OTDEL - соответственно должность и отдел, DATXXX - это типа системной даты (при первой записи, например должность с 1 января 2011, DATEFF=01.01.2011 а DATXXX=31.12.2999. При добавлении записи, например с 01.06.2011, смотри пример) пример: IDDATXXXDATEFFPROFESOTDEL131.12.299901.01.2011KKKPPP Добавляем запись IDDATXXXDATEFFPROFESOTDEL101.06.201101.01.2011KKKPPP131.12.299901.06.2011LLLPPP табл4 = zaga - информация по магазину IDDATXXXDATEFFCENAFFREGION, где DATEFF - дата начала работы в магазине, CENAFF и REGION - соответственно магазин и регион. Принцип DATXXX тот же. Есть сотрудник: za00 IDTN19999999 zaes IDDATENTDATSOR118.06.200831.08.2008113.07.201031.12.2999 zaem IDDATXXXDATEFFPROFESOTDEL113.07.201018.06.2008A51101.11.201113.07.2010A51A3101.09.201301.11.2011A51T7131.12.299901.09.2013E77T7 zaga IDDATXXXDATEFFCENAFFREGION113.07.201018.06.200877701101.11.201113.07.201022201101.11.201201.11.201199999131.12.299901.11.201288888 Что должно получиться в идеале: ТНДПДУДатаДолжнДолжнОтделДатаМагМаг999999918.06.200831.08.200818.06.2008A5118.06.2008777999999913.07.201031.12.299913.07.2010A51A313.07.2010222999999913.07.201031.12.299901.11.2011A51T701.11.2011999999999913.07.201031.12.299901.11.2011A51T701.11.2012888999999913.07.201031.12.299901.09.2013E77T701.11.2012888 Есть запрос: Код: plsql 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. Но он дублит записи ТНДПДУДатаДолжнДолжнОтделДатаМагМаг999999918.06.200831.08.200818.06.2008A5118.06.2008777999999913.07.201031.12.299913.07.2010A51A313.07.2010222999999913.07.201031.12.299913.07.2010A51A301.11.2011999999999913.07.201031.12.299913.07.2010A51A301.11.2012888999999913.07.201031.12.299901.11.2011A51T713.07.2010222999999913.07.201031.12.299901.11.2011A51T701.11.2011999999999913.07.201031.12.299901.11.2011A51T701.11.2012888999999913.07.201031.12.299901.09.2013E77T713.07.2010222999999913.07.201031.12.299901.09.2013E77T701.11.2011999999999913.07.201031.12.299901.09.2013E77T701.11.2012888 Как убрать эти дубли? Помогите!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 12:55 |
|
||
|
Точки перелома сотрудника
|
|||
|---|---|---|---|
|
#18+
Игорь86, group by + [min | max] keep(dense_rank [last | first] order by ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 13:02 |
|
||
|
Точки перелома сотрудника
|
|||
|---|---|---|---|
|
#18+
Игорь86, если кого-то интересует мое мнение (хотя, вряд-ли), naming convention - полное дерьмо. и еще: попробуй ANSI синтаксис - глядишь, запросы будут понятнее собеседникам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 13:06 |
|
||
|
Точки перелома сотрудника
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхИгорь86, group by + [min | max] keep(dense_rank [last | first] order by ...) И как это можно организовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 16:14 |
|
||
|
Точки перелома сотрудника
|
|||
|---|---|---|---|
|
#18+
Добавил к запросу во WHERE это Код: plsql 1. 2. И вроде как заработало. Проверил на 7 сотрудниках - показывает всё как нужно. Буду тестить дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 12:14 |
|
||
|
Точки перелома сотрудника
|
|||
|---|---|---|---|
|
#18+
Игорь86, Код: plsql 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. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 13:37 |
|
||
|
|

start [/forum/topic.php?fid=52&tid=1886249]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
173ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 433ms |

| 0 / 0 |
