Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбор id среди повторяющихся значений  [new]
Jupiter74
Member

Откуда:
Сообщений: 186
Есть программа чеков продаж, база данных - mssql 2008. У нее есть один глюк - иногда задваиваются чеки и смены. Нужно выбрать только уникальные чеки. Пока работаю через distinct - все более-менее нормально. Но тут стал вопрос - мне нужно уникальный ключ записи - для дальнейших запросов и связки. Ключ с любой записи. Казалось бы - элементарно - при запросе использовать на ключ min или max. Проблема в том, что тип ключа - уникальный идентификатор и операции мин и макс не могут быть применены к этому типу поля. Есть ли еще какая-нибудь возможность получить эти данные? Пока единственная идея - преобразовывать уникальный идентификатор в строку
6 июн 17, 06:52    [20541941]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
asdor
Member

Откуда: Москва
Сообщений: 468
Главное конечно, исправить глюк)
Очень он странный, и где еще аукнется.

>>Ключ с любой записи.
Так используйте TOP 1
6 июн 17, 08:16    [20542002]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30766
Jupiter74
Есть программа чеков продаж, база данных - mssql 2008. У нее есть один глюк - иногда задваиваются чеки и смены. Нужно выбрать только уникальные чеки. Пока работаю через distinct - все более-менее нормально. Но тут стал вопрос - мне нужно уникальный ключ записи - для дальнейших запросов и связки. Ключ с любой записи. Казалось бы - элементарно - при запросе использовать на ключ min или max. Проблема в том, что тип ключа - уникальный идентификатор и операции мин и макс не могут быть применены к этому типу поля. Есть ли еще какая-нибудь возможность получить эти данные? Пока единственная идея - преобразовывать уникальный идентификатор в строку
Какой то поток сознания. Какая то "программа чеков", "у неё задваиваются"...

Если вы программист, то изложите точно проблему, например, приведите запрос, который выдаёт неправильные данные, приведите пример данных, укажите, почему вы считаете данные неправильными, так же приложите определения таблиц.
Или, если вы не программист, то наймите программиста.
6 июн 17, 08:58    [20542080]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30766
Jupiter74
Проблема в том, что тип ключа - уникальный идентификатор и операции мин и макс не могут быть применены к этому типу поля.
С чего вы это взяли???
declare @table table(id int identity primary key, a int)
insert @table(a) values (1), (1)
select max(id) from @table
6 июн 17, 09:02    [20542087]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
alexeyvg
Jupiter74
Проблема в том, что тип ключа - уникальный идентификатор и операции мин и макс не могут быть применены к этому типу поля.
С чего вы это взяли???

Там скорее всего GUID, но он тоже вроде как MAX не брезгует :) только вот MAX у GUIDа так себе...
6 июн 17, 09:10    [20542104]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30766
Руслан Дамирович
Там скорее всего GUID, но он тоже вроде как MAX не брезгует :) только вот MAX у GUIDа так себе...
Ну, в данном случае нужно выбрать одно из одинаковых значений, для чего подойдёт и MAX, и MIN...
Важно, что в потоке сознания промелькнуло "операции мин и макс не могут быть применены", что намекает, что перед нами не программист и/или не MsSql
6 июн 17, 09:15    [20542112]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
Jupiter74
Member

Откуда:
Сообщений: 186
alexeyvg,
Скриншот. Смотри на строки.
Программа - база SIS - промежуточная между Астор(бекофис) и Фронтол(касса).
Периодически задваиваются смены со всеми чеками. Когда на кассе время начала смены отличается от конца больше чем на 5 дней - создается новая смена. В общем - тут вопрос к разработчикам. Это отдельная тема.
То, что данные задваиваются - начал копаться, когда в 1с начали выгружаться одинаковые продажи за день.
В принципе - нормально, в 1С лишний отчет удаляется.
Сейчас пишу много аналитики по текущему дню - и нарвался на эти задвоенные строки.
К чему цепляться? Поле SHIFTUID - это такая же задвоенная смена с полностью идентичными полями. Поле State - двоичные данные и ни фига не понятно, что туда пихается. Разработчики по структуре полей не отдают ничего. Копаюсь сам - на догадках и логике.

К сообщению приложен файл. Размер - 23Kb
6 июн 17, 09:21    [20542120]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
Jupiter74
Member

Откуда:
Сообщений: 186
alexeyvg,

Программист. Давно не работал с SQL. Последние лет 6 работал в основном с 1С. С SQL напрямую работал мало.
По поводу - работает с макс - смотри

К сообщению приложен файл. Размер - 15Kb
6 июн 17, 09:26    [20542131]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
Jupiter74
Member

Откуда:
Сообщений: 186
asdor,

По поводу top 1 - вариант пройдет, если я хочу найти только 1 чек. Но мне нужно вернуть Список уникальных чеков - это только часть одного большого запроса.
Хотя если ничего другого у меня не получится - скорее всего придется делать на базе top1 и виртуальной таблице
6 июн 17, 09:42    [20542158]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Jupiter74
alexeyvg,
Программист. Давно не работал с SQL. Последние лет 6 работал в основном с 1С. С SQL напрямую работал мало.
По поводу - работает с макс - смотри

Ну так вы ж программист. Вам нужно применить костыль...
DECLARE @uid UNIQUEIDENTIFIER = NEWID()
SELECT CONVERT( UNIQUEIDENTIFIER, MAX( id ) ) FROM ( VALUES ( CONVERT( VARCHAR(50), @uid ) ), ( CONVERT( VARCHAR(50), @uid ) ) ) t( id )
6 июн 17, 09:43    [20542162]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Jupiter74
Программист

Jupiter74
Последние лет 6 работал в основном с 1С.

:D :D :D

Я не очень вник в поток сознания про чеки и прочие, но есть подозрение, что задвоение записей проблема типовая и отлично решается через RowNumber() Over(...) или нет?
6 июн 17, 10:06    [20542223]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
Jupiter74
Member

Откуда:
Сообщений: 186
Cammomile,
Решается. Если б мне был нужен просто список чеков.
Для таких запросов меня и distinct вполне устраивал..
Вопрос в том, что мне нужно вернуть и поле UNIQUEIDENTIFIER с любой записи - на этом поле основаны дальнейшие связи.
Просто объясняю:
В этой таблице часть чеков сидит по 2 раза. Все поля одинаковые, разный только ключ - поле с типом UNIQUEIDENTIFIER .
По этому полю связь с подчиненными таблицами - состав чека, скидки в чеке и т.д. В подчиненных таблицах записи тоже задвоенные... Нужно выбрать только уникальные записи со всех таблиц.
6 июн 17, 10:37    [20542325]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Кое-кто любит давать вот эту ссылку: 8947782
6 июн 17, 10:50    [20542404]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
DECLARE @table TABLE (SomeDuplicatedID int, SomeKeyGUID uniqueidentifier)

INSERT INTO @table SELECT 1, NEWID()
INSERT INTO @table SELECT 1, NEWID()
INSERT INTO @table SELECT 1, NEWID()
INSERT INTO @table SELECT 2, NEWID()
INSERT INTO @table SELECT 2, NEWID()

SELECT * FROM( 
SELECT SomeDuplicatedID,SomeKeyGUID, RN = ROW_NUMBER() OVER (partition by SomeDuplicatedID  order by SomeDuplicatedID ) FROM @table ) ZZ
WHERE ZZ.RN = 1 


?
6 июн 17, 10:57    [20542444]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30766
Руслан Дамирович
Ну так вы ж программист. Вам нужно применить костыль...
Вот именно.

Jupiter74
По поводу - работает с макс - смотри

Так вы писали, что для ключевого поля нельзя применять макс.
А на самом деле его нельзя использовать для этого типа данных. И ещё для некоторых типов.
Программисту нужно точнее формулировать, лучше в виде исходного сообщения об ошибке. И лучше в виде текста, а не картинки - картинки "этожпрограммистам" посылаю менеджеры и секретарши.
6 июн 17, 12:01    [20542783]     Ответить | Цитировать Сообщить модератору
 Re: Выбор id среди повторяющихся значений  [new]
Jupiter74
Member

Откуда:
Сообщений: 186
Jupiter74
Пока единственная идея - преобразовывать уникальный идентификатор в строку


Все так и сводится именно к моей первой идее. Просто думал есть вариант попроще
6 июн 17, 13:32    [20543211]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить