Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрос по поиску дублей
|
|||
|---|---|---|---|
|
#18+
Доброго дня. Прошу подсказать как по таблице icmadmin.Table определить дубли элементов. Основное условие: ищем совпадения по полю BARCODE, при отличных ITEMID. По полю Version - берем только последнюю версию. BARCODE ITEMID Version 55521DDDDDDDDDD330001 A1004867 1 55521DDDDDDDDDD330001 A1009924 1 55521DDDDDDDDDD330001 A1009979 1 55521DDDDDDDDDD330001 A1009988 1 55521DDDDDDDDDD330001 A1007303 1 55521DDDDDDDDDD330001 A1007303 2 55521DDDDDDDDDD330001 A1007303 3 55521DDDDDDDDDD330001 A1009938 1 Смысл: есть элемент (выделил зеленым), который сделан пользователем и имеет несколько версий (возможно), а есть все остальные итемы которые являются дублями и подлежат удалению (после рассмотрения их целесообразности в системе). Т.е. примерно из этого запроса, если по полю Barcode больше одной записи то выводить запись о проблемном Barcode... SELECT new.ATTR0000001071 BarCode, new.ItemID, count (new.ItemId) FROM ICMADMIN.ICMUT01021001 new WHERE new.ATTR0000001071 = '55521DDDDDDDDDD330001' AND new.VERSIONID = (SELECT MAX(old.VERSIONID) FROM ICMADMIN.ICMUT01021001 old WHERE new.ItemID = old.ItemID) group by new.ATTR0000001071, new.ItemId; И еще интересно можно ли как-то иначе определять мах версию кроме этой строчки? ( AND new.VERSIONID = (SELECT MAX(old.VERSIONID) FROM ICMADMIN.ICMUT01021001 old WHERE new.ItemID = old.ItemID)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 16:04 |
|
||
|
Запрос по поиску дублей
|
|||
|---|---|---|---|
|
#18+
Max K., Сложно понять, что именно нужно. DB2 SQL CookBook очень полезен для изучения. -- определить записи с дублями with dups (BarCode, ItemID, cnt, max_Version) as ( SELECT new.ATTR0000001071 BarCode, new.ItemID, count (*), max(Version) FROM ICMADMIN.ICMUT01021001 new group by new.ATTR0000001071, new.ItemId having count (*) > 1 ) -- и выдать все записи с дублями, где версия ниже максимальной select new.* FROM ICMADMIN.ICMUT01021001 new inner join dups on (new.ATTR0000001071, new.ItemId)=(dups.ATTR0000001071, dups.ItemId) where new.Version < dups.max_Version order by new.ATTR0000001071, new.ItemId ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 16:56 |
|
||
|
Запрос по поиску дублей
|
|||
|---|---|---|---|
|
#18+
A.Panskikh, Перефразирую: у меня есть таблица в таком виде: Barcode ItemID 55521DDDDDDDDDD330001 A1009979 - (уникальная запись) 55521DDDDDDDDDD330001 A1009988 - (уникальная запись) 55521DDDDDDDDDD330001 A1007303 - (уникальная запись) 55521DDDDDDDDDD330001 A1007303 - (дубль, подобная пара Barcode - ItemID уже есть) 55521DDDDDDDDDD330001 A1007303 - (дубль, подобная пара Barcode - ItemID уже есть) 55521DDDDDDDDDD352203 A1002702 - (уникальная запись) 55521DDDDDDDDDD352203 A1002702 - (дубль, подобная пара Barcode - ItemID уже есть) Нужно её схлопнуть к вот такому виду. Т.е. по полю Barcode должно остаться количество уникальных ItemId 55521DDDDDDDDDD330001 3 55521DDDDDDDDDD352003 1 А затем выкинуть записи где ItemId = 1. Т.е. финальная таблица, которая покажет что для определенного штрихкода у меня 3 уникальных элемента создано: 55521DDDDDDDDDD330001 3 Над предлагаемыми запросами пока думаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 17:15 |
|
||
|
Запрос по поиску дублей
|
|||
|---|---|---|---|
|
#18+
Max K., Добрый день. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2016, 18:26 |
|
||
|
Запрос по поиску дублей
|
|||
|---|---|---|---|
|
#18+
Огромное спасибо Марк. Именно то что нужно. Мои эксперименты не удавалась т.к. не знал что можно делать подсчет (count) по уже схлопнутым значениям distinct... Нашел 12 тысяч дублей в базе, пойду разбираться кто виноват ... Еще раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 08:10 |
|
||
|
Запрос по поиску дублей
|
|||
|---|---|---|---|
|
#18+
Начал разбираться в причинах дублей и понял что скрипт не полностью удовлетворяет потребностям... Смысл в том что вначале была 1 карточка с BC01 и ID01, а потом для данного элемента обновили атрибут barcode и у этой карточки появились 2 и 3 версии с BC02 И ID01 . Затем другой пользователь создал заново карточку с BC01, которой соответственно назначился новый ItemID - ID02 . В итоге скрипт считает что для BC01 у нас 2 уникальных ItemId, а для BC02 1 уникальный ItemId. Это не правильно. Нужно оценить только по последней версии, т.е. запрос должен вернуть 2 строки в которых Count = 1. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 16:14 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=43&tid=1600673]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 381ms |

| 0 / 0 |
