Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.01.2013, 15:49   #1
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию Выборка данных

Всем добрый день и всех с новым годом!
Нужен совет или подсказка...
Вообщем дело вот в чем:
Есть таблица с полями
Фио, 100500 полей....., ДАТА

Что мне нужно:
нужно на указанный диапазон по дате получить список где фио будет повторяться 2 раза (или 3 раза)

например, есть данные
Петров .... 01.01.2013
Иванов .... 02.01.2013
Петров .... 01.01.2013

делаю фильтр с 01.01.2013 по 02.01.2013
на выходе получаю записи только с Петровым. т.к их 2, а иванова одна поэтому она не попадает.


Собственно вопрос заключается в следующем:
Можно ли это все сделать SQL запросом? т.е в запросе сделать проверку на одинаковые данные в поле фио а потом уже фильтр...

в принципе могу сделать по своему, но это уже крайности) поэтому если есть более мудрое и быстрое решение, подскажите...
Если решений быстрых нет, буду делать так:

1. Делаю фильтр по диапазону нужному.
2. получаю все записи этого диапазона
3. загоняю например в ЛистБокс циклом все ФИО по строкам
4. Удаляю из листбокса повторяющиеся
5. Запускаю по листбоксу цикл. в цикле делается фильтр по нужному диапазону и по текущему ФИО(items листбокса) получаю текущие записи, записываю Recordcount Текущий). в итоге получается ФИО , КОЛ(строк).
6. ну а потом по условию вывожу нужных людей с нужным количеством строк)))


ps. использую ADOQUERY, DATASOURCE, ADOCONNECTION
icq: 489-124-264; mail: invazia@mail.ru
nVz вне форума
Старый 03.01.2013, 00:24   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

например, так:

Код:
SELECT FIO FROM ВашаТаблица
WHERE Дата between :d1 and :d2
GROUP BY FIO
HAVING COUNT(*)>1
вот только ваши 100500 полей таким запросом (так просто) не получить

можно, правда, попробовать вложенный запрос применить.
вот так:
Код:
SELECT A.* FROM ВашаТаблица A
WHERE A.Дата between :d1 and :d2
and A.FIO in (SELECT B.FIO FROM ВашаТаблица B
    WHERE B.Дата between :d1 and :d2
    GROUP BY B.FIO
    HAVING COUNT(*)>1)

Последний раз редактировалось Serge_Bliznykov; 03.01.2013 в 00:27.
Serge_Bliznykov вне форума
Старый 03.01.2013, 03:59   #3
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию

Там не 100500 полей, просто несколько полей еще)))
попробую завтра!!!!
спасибо! отпишусь

Serge_Bliznykov с первым запросом разобрался, но результат получается немного не тот. на выходе получается только список ФИО попадающих в условие, а нужно получить все строки по данным ФИО и со всеми полями * .
Буду дальше копаться.
За помощь большое спасибо!
icq: 489-124-264; mail: invazia@mail.ru

Последний раз редактировалось Stilet; 04.01.2013 в 21:57.
nVz вне форума
Старый 03.01.2013, 14:13   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а нужно получить все строки по данным ФИО и со всеми полями *
а это должен дать второй вариант запроса (с вложенным подзапросом).
Если, конечно, Ваша СУБД это поддерживает.


А ещё, мне немного непонятно, почему Вы считаете, что поле ФИО является уникальным ключом (однозначно идентифицирующим запись в таблице)... впрочем, конечно, это уже совсем другая история...
Serge_Bliznykov вне форума
Старый 04.01.2013, 16:43   #5
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию

По первому запросу все хорошо, второй запрос срабатывает, ошибок нет, но по клику, таблица пустая, код:
Код:
ADOQuery1.SQL.Text :='select A.* from таблица A where A.data between :Dat1 and :Dat2 
 and A.fio in (select B.fio from таблица B where B.data between :Dat1 and :Dat2 GROUP BY B.fio HAVING COUNT(*)>1)';
icq: 489-124-264; mail: invazia@mail.ru

Последний раз редактировалось Stilet; 04.01.2013 в 21:56.
nVz вне форума
Старый 04.01.2013, 21:57   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если без дат искать? Т.е. без проверок на попадания в даты?
I'm learning to live...
Stilet вне форума
Старый 05.01.2013, 00:22   #7
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию

в данном случае даты необходимость)
icq: 489-124-264; mail: invazia@mail.ru
nVz вне форума
Старый 05.01.2013, 08:44   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Stilet предлагает без проверки дат для определения причины отсутствия данных. Если запрос без этого работает, значит проблема в задании интервала дат
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 05.01.2013, 12:38   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да. Именно проверить участки запроса.
I'm learning to live...
Stilet вне форума
Старый 05.01.2013, 16:40   #10
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию

Проблему решил созданием еще нескольких промежуточных таблиц и перегоном данных.
Всем большое спасибо за участие в моих делах)
icq: 489-124-264; mail: invazia@mail.ru
nVz вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выборка из данных Артл Microsoft Office Excel 4 25.11.2011 20:05
Выборка данных Liilla Microsoft Office Excel 8 06.06.2011 09:30
ВЫБОРКА ДАННЫХ Айвенго Microsoft Office Access 0 14.02.2011 10:04
Выборка данных segail Microsoft Office Excel 4 08.02.2010 16:37
Выборка данных ADRENALIN86 Microsoft Office Excel 1 13.08.2009 15:51