|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
Всем привет. Есть такая таблица: IdEventLogIdEventLogDateBatchNameEventTypeUserNameRoleNameDetailsVerificationResultBatchIdTaskIdWorkstation405461811354323942020-02-28 17:48:29.000CRB2020280217150603_1Comleted taskipugacheva2Старший оператор ЦВПNULLSAVE_AND_FORWARD117414174736352SRVTE298405461711354323792020-02-28 17:48:28.000CRB2020280217225632_1Received taskoryazepovaОператор ЦВП расширенныйПолучение задания пользователемNULL117414324736382SRVTE297405461611354323602020-02-28 17:48:26.000CRB2020280216560813_1Comleted taskoryazepovaОператор ЦВП расширенныйNULLSAVE_AND_FORWARD117414214736355SRVTE297405461511354323082020-02-28 17:48:11.000CRB2020280217175055_1Canceled taskymikheeva2Оператор ЦВПNULLNULL117414284736362SRVTE296405461411354322462020-02-28 17:47:58.000CRB2020280217082625_1Received taskeluzinaОператор ЦВППолучение задания пользователемNULL117414294736378SRVTE296405461311354320272020-02-28 17:47:24.000CRB2020280216230826_4Received taskoyukhimetsСтарший оператор ЦВППолучение задания пользователемNULL117414304736377SRVTE295405461211354320132020-02-28 17:47:21.000CRB2020280216554384_2Comleted taskoyukhimetsСтарший оператор ЦВПNULLSAVE_AND_FORWARD117414114736329SRVTE295 У номеров BatchName существует три события EventType: Received, Canceled, Comleted (да, тут пропущена буква). Мне нужно понять, были ли у каких-нибудь номеров дублирующие назначения (Received task). Примеры. Корректная ситуация: EventLogDateBatchNameEventTypeUserName2020-02-28 07:56:38.000WPS2020260218521199_1Received tasksshmeleva22020-02-28 07:57:02.000WPS2020260218521199_1Canceled tasksshmeleva22020-02-28 09:48:45.000WPS2020260218521199_1Received taskyeremina2020-02-28 09:50:11.000WPS2020260218521199_1Comleted taskyeremina Корректная ситуация: EventLogDateBatchNameEventTypeUserName2020-02-28 12:55:27.000EUR2020280212384237_1Received taskoguryleva2020-02-28 12:58:01.000EUR2020280212384237_1Comleted taskoguryleva2020-02-28 13:01:49.000EUR2020280212414737_1Received taskivolkova22020-02-28 13:03:28.000EUR2020280212414737_1Canceled taskivolkova22020-02-28 13:03:30.000EUR2020280212414737_1Received taskegureva2020-02-28 13:06:52.000EUR2020280212414737_1Comleted taskegureva Некорректная ситуация: EventLogDateBatchNameEventTypeUserName2020-02-28 17:23:17.000CRB2020280216535440_1Received taskivolkova22020-02-28 17:24:52.000CRB2020280216535440_1Received taskadasaeva22020-02-28 17:26:33.000CRB2020280216535440_1Comleted taskadasaeva2 В данном случае дважды получили Received task, что говорит о какой-то ошибке в программе. На данный момент осуществляю поиск таких BatchName следующим скриптом: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Но выглядит это довольно отвратно и не факт, что во всех случаях правильно сработает. Как можно сделать скрипт более элегантным и лаконичным (или переделать), чтобы при этом выдавал требуемое? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 18:44 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
Сколько записей может соответствовать одному BatchName? Поначалу мне показалось, что 2, но дальше похоже, что таки 2N. Некорректная ситуация - возможно ли Canceled либо Comleted без Received? в смысле - бывает ли на практике? Если действительно 2N - бывает ли 2 Received, и только потом парные им Canceled либо Comleted? Это - корректно или нет? Обязательно ли в комплекте иметь пару с совпадающим UserName? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 19:33 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
malltaf Но выглядит это довольно отвратно и не факт, что во всех случаях правильно сработает. Как можно сделать скрипт более элегантным и лаконичным (или переделать), чтобы при этом выдавал требуемое? Спасибо. Читайте про LAG LEAD ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 19:43 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
Всем спасибо. Забыл отписаться, к чему пришел. Создал дополнительную таблицу и хранимую процедуру с следующим содержанием: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 10:26 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
malltaf Всем спасибо. Забыл отписаться, к чему пришел. Создал дополнительную таблицу и хранимую процедуру с следующим содержанием: Код: 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.
А слабо прочитать про PARTITION BY и избавиться от курсора? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 10:32 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
Стесняюсь спросить - это зачем? malltaf Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 10:55 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
SQL2008 Стесняюсь спросить - это зачем? malltaf Код: sql 1.
для удобства добавления/удаления условий в where ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 10:55 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
msLex SQL2008 Стесняюсь спросить - это зачем? пропущено... для удобства добавления/удаления условий в where хм... т.е. не задумываться ставить ли "and " перед условием или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 11:01 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
SQL2008 msLex пропущено... для удобства добавления/удаления условий в where хм... т.е. не задумываться ставить ли "and " перед условием или нет? легко комментируется/раскомментируется любое условие через and стандартная "проблема" оформления "списков", когда 1-я или последняя запись отличается от остальных. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 11:04 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
впрочем в коде, который я обслуживаю мне тоже попалось условие в MERGE Код: sql 1.
Что вызвало деградацию запроса в обычный INSERT. Хорошо, что эти люди не работает поварами, докторами и пожарными. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 11:05 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
msLex SQL2008 пропущено... хм... т.е. не задумываться ставить ли "and " перед условием или нет? легко комментируется/раскомментируется любое условие через and стандартная "проблема" оформления "списков", когда 1-я или последняя запись отличается от остальных. Да, это понятно. Правда никогда этим не пользовался. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 11:07 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
SQL2008 впрочем в коде, который я обслуживаю мне тоже попалось условие в MERGE Код: sql 1.
Что вызвало деградацию запроса в обычный INSERT. Хорошо, что эти люди не работает поварами, докторами и пожарными. Такие "фокусы" делают для доступа в output к полям, которых нет в "таблице" inserted. В merge это возможно, в insert - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 11:23 |
|
MSSQL найти дубли с выборкой
|
|||
---|---|---|---|
#18+
msLex Такие "фокусы" делают для доступа в output к полям, которых нет в "таблице" inserted. В merge это возможно, в insert - нет. Странно... Официальная документация имеет на этот счет иное мнение ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2020, 12:13 |
|
|
start [/forum/topic.php?fid=46&msg=39936965&tid=1686348]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 446ms |
0 / 0 |