Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / уникальность данных без SQL / 21 сообщений из 21, страница 1 из 1
11.05.2005, 23:16:14
    #33058685
VanGuard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Помогите, пожалуйста.
...
Рейтинг: 0 / 0
11.05.2005, 23:22:45
    #33058687
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Уточните, пожалуйста вопрос - я так ничего не понял...
...
Рейтинг: 0 / 0
11.05.2005, 23:26:19
    #33058689
VanGuard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
как подсчитать уникальное количество полей. Есть таблица поля: cod, date, Num_Document. Повторяются значения date. Вопросик: как посчитать количество строк для cod. Заранее благодарю.
...
Рейтинг: 0 / 0
12.05.2005, 02:09:01
    #33058749
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
И опять неясно.
...
Рейтинг: 0 / 0
12.05.2005, 08:02:28
    #33058837
О_В_Д
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Вопрос действительно непонятен. Может, индекс UNIQUE на поле date?
...
Рейтинг: 0 / 0
12.05.2005, 09:08:41
    #33058912
urmas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
1. Если Вам нужно пересчитать количество записей по полю date (т.е. все записи вообще)
select count(date) from tablename

2. Если неповторящиеся значения по полю date

select count(date) distinct from tablename

Не забудьте при этом присвоить получаемые значения
либо через
set @datecount = одна из вышестоящих выборок
либо через
одна из стоящих выборок into cursor (или table) cursorname (или tablename)
...
Рейтинг: 0 / 0
12.05.2005, 10:40:52
    #33059157
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Код: plaintext
1.
2.
3.
4.
5.
6.
create cursor test (testID I)
insert into test (testID) values ( 1 )
insert into test (testID) values ( 1 )
insert into test (testID) values ( 2 )
insert into test (testID) values ( 2 )

select count(*), count(distinct testID) from test
В MS SQL синтаксис собственно запроса абсолютно такой же.
...
Рейтинг: 0 / 0
12.05.2005, 14:33:03
    #33059918
VanGuard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
прошу прощения за неточную постановку вопроса, я новичок как в програмировании, так и на форумах. Нужно посчитать количество записей для каждого кода (поле cod), но чтобы повторяющиеся записи были исключены, ну что-то типа select distinct COD, date from table1 group by cod, date into cursor curtable -> select curtable -> count for (cod = 1) to colcod, если возможно это сделать опираясь на индексы таблицы table1 (в таблице около 9млн. записей)
...
Рейтинг: 0 / 0
12.05.2005, 14:52:26
    #33059991
VanGuard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
urmas1. Если Вам нужно пересчитать количество записей по полю date (т.е. все записи вообще)
select count(date) from tablename

2. Если неповторящиеся значения по полю date

select count(date) distinct from tablename

Не забудьте при этом присвоить получаемые значения
либо через
set @datecount = одна из вышестоящих выборок
либо через
одна из стоящих выборок into cursor (или table) cursorname (или tablename) Такую конструкцию, into cursor, я примерно понимаю, но с использованием SQL работает очень долго (записей около 9млн.), а если создать таблицу COPY TO curTable FIELDS cod, date работает быстрее, но от этого количество записей меньше не становиться, вот если бы исключить повторения в поле date, было бы то что надо
...
Рейтинг: 0 / 0
12.05.2005, 15:50:53
    #33060213
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Ну, так прямо и считай:

Код: plaintext
SELECT cod, COUNT(DISTINCT date), COUNT(*) FROM table1 GROUP BY cod

В результате получишь количество уникальных значений поля Date в пределах каждого значения поля COD

Для сравнения, посмотри содержимое 3 столбца, то что возвращает COUNT(*) - это вообще общее количество записей для каждого значения поля COD

Если нужно что-то другое, то напиши код, как ты это рассчитываешь. Со словами у тебя как-то не очень получается
...
Рейтинг: 0 / 0
12.05.2005, 16:33:34
    #33060351
VanGuard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Спасибо ВладимирМ, работает (не знал про сочетание count(distinct)). А если возможность сделать это без SQL, может даш ссылочку, что почитать. Ещё раз большое спасибо.
...
Рейтинг: 0 / 0
12.05.2005, 16:56:21
    #33060423
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
VanGuardвозможность сделать это без SQL
Зачем? Быстрее не будет однозначно!
Тебе же не хочется морочить себе голову ненужными индексами и кучей COUNT'ов в каком-нибудь цикле? Тем более, что сразу можешь получить красивую табличку, а не набор переменных...
...
Рейтинг: 0 / 0
12.05.2005, 17:12:30
    #33060480
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Без SQL будет примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
******
* create 
******
CREATE TABLE TEST.DBF (COD N( 16 ), DATE D)
INSERT INTO TEST (COD, DATE ) VALUES ( 3 ,DATE())
INSERT INTO TEST (COD, DATE ) VALUES ( 1 ,DATE())
INSERT INTO TEST (COD, DATE ) VALUES ( 1 ,DATE())
INSERT INTO TEST (COD, DATE ) VALUES ( 2 ,DATE()- 1 )
INSERT INTO TEST (COD, DATE ) VALUES ( 2 ,DATE())
INSERT INTO TEST (COD, DATE ) VALUES ( 3 ,DATE())
INSERT INTO TEST (COD, DATE ) VALUES ( 3 ,DATE()- 1 )
CLOSE TABLES 
******
* now example
******
USE TEST 
SET  OPTIMIZE  OFF
INDEX ON STR(COD, 16 )+DTOC(DATE) TO AAA UNIQUE  COMPACT 
SET INDEX TO AAA
SORT ON COD TO BBB
CREATE TABLE AAA.DBF (COD N( 16 ),COUNTER N( 16 ))
SELECT AAA
APPEND FROM BBB
REPLACE ALL COUNTER WITH  1 
TOTAL TO REZULT ON COD FIELDS COUNTER  
USE REZULT
BROWSE
SET OPTIMIZE  ON
******
* clean after experiment
******
CLOSE DATABASES 
DELETE FILE TEST.DBF 
DELETE FILE REZULT.DBF 
DELETE FILE AAA.DBF
DELETE FILE AAA.IDX
DELETE FILE BBB.DBF
...
Рейтинг: 0 / 0
12.05.2005, 18:38:07
    #33060736
VanGuard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Спасибо всем ответил, надеюсь правильно понял про INDEX ... UNIQUE
...
Рейтинг: 0 / 0
13.05.2005, 03:05:35
    #33061121
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Hi VanGuard!

INDEX ... UNIQUE это своеобразный фильтр - если есть повторяющиеся значения ключа, то он "скрывает" всё кроме первого. Для твоей задачи подойдёт, хотя через SQL проще, красивее и быстрее (особенно если есть индексы по коду и дате).

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
13.05.2005, 08:13:19
    #33061190
VanGuard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Igor Korolyov
..... , хотя через SQL проще, красивее и быстрее (особенно если есть индексы по коду и дате).

Posted via ActualForum NNTP Server 1.1 Спасибо за ответ, но может подскажете, а как в запросе использовать индекс *.CDX, тэг по коду и дате есть, (или чтоб много не писать дадите ссылочку), а может надо перед перед SQL открыть таблицу по этому тэгу. (Не дайте помереть неучем).
...
Рейтинг: 0 / 0
13.05.2005, 11:02:22
    #33061578
Redrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
VanGuardкак в запросе использовать индекс *.CDX
Достаточно того, что он существует! Остальное - не Ваша проблема! ;-)
...
Рейтинг: 0 / 0
13.05.2005, 11:39:41
    #33061700
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Redrik VanGuardкак в запросе использовать индекс *.CDX
Достаточно того, что он существует! Остальное - не Ваша проблема! ;-)Крохотное уточнение. Сами открываются вместе с таблицей только структурные индексы (те, у которых * = имени таблицы, которые лежат рядом с таблицей и когда в таблице установлен флаг, что она имеет структурный индекс). В общем случае, *.cdx может быть и неструктурным индексом, тогда его потребуется открыть отдельно. Я не буду сейчас вдаваться в кучу других проблем неструктурных индексов, в частности, связанных с ситуацией, когда таблицу открыли, индекс забыли, запись добавили, потом индекс открыли - а он уже не соответствует табличке, т.е. битый. Но мы же с вами правильные, мы же используем индексы только структурные, не так ли? ;-)))
...
Рейтинг: 0 / 0
14.05.2005, 02:58:47
    #33063638
VanGuard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Опять моя ошибка в вопросе, я не указал, что индекс неструктурный. Исправить ситуацию не могу, надеюсь что игнорировать не будете, если скажу, что я не программист, а только оператор БД, но по какой-то причине у нас нет поддержки разработчиков, хотя было в начале всё ОК, вот жизнь и заставила, хотя я не сильно упирался, заниматься выборками из таблиц и задавать Вам эти глупые вопросы. И считаю, что тема "Уникальность данных без SQL" для меня закрыта, т.к. своими вопросами могу запутать кого угодно, а в ответах могу утонуть. Буду пока читать книгу М.Базияна, а вдруг поможет. Спасибо всем за внимание, а особенно за советы и любые объяснения.
...
Рейтинг: 0 / 0
15.05.2005, 02:09:47
    #33065646
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Hi VanGuard!

Использовать зачем? Чтобы он "фильтровал" дубли? AFAIK это невозможно в принципе. Только старые XBase команды (SCAN, SKIP, REPLACE...) и только при "активности" данного индекса (тега) будут "фильтровать" дубли.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
15.05.2005, 03:01:07
    #33065660
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
уникальность данных без SQL
Hi VanGuard!

Перечитал ещё раз вопрос и подумал - ты новерное имел в виду как "ускорить" работу SQL варианта с использованием неструктурных тегов простых индесов - т.е. НЕ UNIQUE? Тогда достаточно их просто создать (если не было) или подключить (но тогда нужно быть на 100% уверенным что они актуальны! Т.е. что никто не менял данные НЕ подключив предварительно эти индексные файлы).
Подключаются cdx по SET INDEX TO ... ADDITIVE ( ADDITIVE нужно если есть другие неструктурные индексы - если же он один, то без разницы - структурный никогда не отключается).
Создаются как и всегда по INDEX ON ...

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / уникальность данных без SQL / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]