Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.30;
Скачать: CL | DM;

Вниз

Повторяющиеся значения   Найти похожие ветки 

 
AlexanderSK ©   (2003-06-04 11:58) [0]

Есть ClientDataSet в нем табличка (несколько полей). Существуют по несколько записей с одинаковыми значениями в одном из полей. Как оптимальней получить табличку в которой отсутствуют повторения по этому полю?

Заранее спасибо!


 
stone ©   (2003-06-04 12:00) [1]

В клиент датасет ты помещаешь готовый набор данных, значит нужно ограничивать НД на уровне его подключения. Например, получить запросом, используя DISTINCT


 
Sandman25 ©   (2003-06-04 12:07) [2]

SELECT DISTINCT f1 FROM t1


 
AlexanderSK ©   (2003-06-04 12:14) [3]

В том-то и состоит весь фокус, что мне нужны все данные! Но на определенном этапе работы с ними не нужны повторения! А запрашивать 2 раза сервер неприемлемо!


 
Sandman25 ©   (2003-06-04 12:16) [4]

Пример, пожалуйста.
У нас есть
f1 f2 f3
1 2 3
1 3 4
2 4 5
2 5 6
3 6 7
Что нужно в результате?


 
AlexanderSK ©   (2003-06-04 12:20) [5]

например по f1

f1 f2 f3
1 2 3 (или 1 3 4 - без разницы)
2 4 5 (или 2 5 6 - без разницы)
3 6 7


 
needle ©   (2003-06-04 12:29) [6]

> AlexanderSK
а ты попроси пользователя отметить повторяющиеся данные и отбрось их :-)))
select distinct , больше никак


 
Sandman25 ©   (2003-06-04 12:32) [7]

Если без разницы, то select distinct f1 from t1 :)
А если уж очень хочется что-нибудь показать, то можно
select f1, min(f2), min(f3) from t1 group by f1


 
AlexanderSK ©   (2003-06-04 12:44) [8]

А можно это сделать как нибудь в клиентском приложениии, когда данные уже получены? Или только "перезапросив" сервер?


 
Johnmen ©   (2003-06-04 12:53) [9]

>AlexanderSK © (04.06.03 12:44)

Нет. "перезапросив".


 
needle ©   (2003-06-04 12:59) [10]

>AlexanderSK не перетрудится твой сервер, не боись :-)


 
AlexanderSK ©   (2003-06-04 13:09) [11]

>needle
Сервер-то не перетрудиться! А вот данные-то через Internet предаються....


 
Polevi ©   (2003-06-04 14:07) [12]

создай в датасете internalcalc поле Z, пробегись по датасету, при первом значении поля записывай в Z 1, при повторных - 0
дальше
Dataset.Filter("Z=1")
Dataset.Filtered:=true;



 
Sandman25 ©   (2003-06-04 14:11) [13]

AlexanderSK © (04.06.03 13:09)

Тем более нечего зря всю таблицу перекачивать. select distinct


 
Johnmen ©   (2003-06-04 14:35) [14]

>Polevi © (04.06.03 14:07)

А способов, особенно извращенческих, можно напридумывать множество...:)


 
Polevi ©   (2003-06-04 14:45) [15]

2Johnmen © (04.06.03 14:35)
вы дали совет
я дал ответ на вопрос

>А способов, особенно извращенческих, можно напридумывать множество...:)

- желаю удачи


 
интересующийся   (2003-06-04 14:47) [16]

Sandman25
а если и другие записи тоже нужны,
но в определенный момент только уникальные по F1?

Johnmen
Зря ведь Polevi дело пишет, только делать
это надо на сервере (т.е. в запросе)






 
интересующийся   (2003-06-04 14:52) [17]

Johnmen
тем более чел писал, что
>В том-то и состоит весь фокус, что мне нужны все данные! Но на >определенном этапе работы с ними не нужны повторения! А >запрашивать 2 раза сервер неприемлемо!

AlexanderSK
а можно поинтересоваться какая БД?



 
Johnmen ©   (2003-06-04 14:55) [18]

>Polevi © (04.06.03 14:45)

Мне почему-то чувствуется некая, непонятная мне, обида в твоем посте...
И еще мне не совсем ясно, зачем приводить ответы, идеологически направляющие не в ту сторону ? (Хоть и помогающие (извративщись) решить задачу)...



 
Sandman25 ©   (2003-06-04 14:59) [19]

Johnmen © (04.06.03 14:55)

А мне обида понятна. Он привел одно из самых эффективных решений данной задачи. Но и Вы правы тоже - не стоит тащить все данные на клиента для дальнейшей фильтрации.


 
интересующийся   (2003-06-04 15:11) [20]

если в t1 не должно быть дублирования данных
то можно сделать так (ms sql):
SELECT t1.f1, t1.f2, t1.f3, cf4 = case when t1.f1=t2.f1 then 1 else 0 end
from t1 left join
(SELECT f1, min(f2) as f2, min(f3) as f3 from t1 group by f1) as t2 on t1.f1 = t2.f1 and t1.f2 = t2.f2 and t1.f3 = t2.f3
order by t1.f1

у меня вышло
f1 f2 f3 cf4
----------- ----------- ----------- -----------
1 2 3 1
1 3 4 0
2 4 5 1
2 5 6 0
3 6 7 1

а дальше как предлагал Polevi - фильтровать


 
Zacho ©   (2003-06-04 15:12) [21]

Я что-то вообще понять не могу: причем здесь DISTINCT ?
Ведь одинаковые значения только в одном из полей записей. И к тому же сначало они нужны все.
Поэтому, imho, все же более правильно сначало вытащить все необходимые записи, а после их обработки - отфильтровать на клиенте. Зачем второй раз перезапрашивать ?


 
интересующийся   (2003-06-04 15:19) [22]

ЕСЛИ я правильно понял
сначала нужны все данные, а потом только отфильрованные по
уникальному f1 (как писал автор f2 & f3 роли не играют)
при этом запрос к БД должен быть только один

AlexanderSK ©, может вы уточните?



 
Zacho ©   (2003-06-04 15:21) [23]

Еще одна непонятка: из нескольких записей оставить одну. Какую ? По какому критерию ? Случайно ? Что это за задача такая, в которой неважно, какие именно данные оставить, а какие - удалить ?


 
интересующийся   (2003-06-04 15:24) [24]

автор ушел и ему уже ничего не нужно -)



Страницы: 1 вся ветка

Текущий архив: 2003.06.30;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
3-97506
Igor Mish
2003-06-05 10:54
2003.06.30
Можно еще про Rave :-)


3-97485
Nikolay M.
2003-06-04 16:59
2003.06.30
Возвращаемый интерфейс для трехзвенки


1-97594
TCrash
2003-06-19 00:36
2003.06.30
Иконка в трее без окон


1-97642
EgorKA
2003-06-20 00:03
2003.06.30
Какойнибуть цикл для перевода букв с анг на рус...


14-97861
N_
2003-06-11 22:29
2003.06.30
Если есть Свет