Форум: "Базы";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
Вниз
Повторяющиеся значения Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c