Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-97510
Renard
2003-06-05 14:52
2003.06.30
mySQL + dbExpress + freesql.org


14-97797
ГОСТ
2003-06-10 01:42
2003.06.30
Будут ли отменены госты


14-97833
DDDD
2003-06-12 09:34
2003.06.30
Microsoft DDK


7-97913
BaRToV
2003-04-13 13:13
2003.06.30
CD-Rom и все что с ним связано...


14-97851
Andrey02
2003-06-12 19:31
2003.06.30
путь к Мои Документы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский