powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка повторяющихся записей
12 сообщений из 37, страница 2 из 2
Выборка повторяющихся записей
    #32213779
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Псевдонимы таблиц в запросе - это обозначения таблиц только в этом конкретном запросе и они (псевдонимы) могут быть какими угодно и для любых таблиц и процедур. Например,
SELECT C.CITY FROM CITIES C WHERE C.POPULATION < 1000000,
где C - псевдоним таблицы CITIES

SELECT A.NAMTVR FROM PROC_NAKL(:ID) A,
где A - псевдоним для хранимой процедуры PROC_NAKL

В предыдущем сообщении

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select PSEVD1.abfam,PSEVD1.abname,PSEVD1.abotch,
         PSEVD1.fckey,PSEVD1.sckey 
from ab PSEVD1
where (select count(PSEVD2.abfam) from ab PSEVD2 
          where PSEVD2.abfam = PSEVD1.abfam 
            and PSEVD2.abname = PSEVD1.abname 
            and PSEVD2.abotch = PSEVD1.abotch) >  1  
order by PSEVD1.abfam, PSEVD1.abname, PSEVD1.abotch 


PSEVD1 и PSEVD2 - это и есть псевдонимы для одной и той же таблицы <ab>.
В данном запросе нужно, чтобы одна и та же таблица была открыта как-бы два раза для нахождения записей, у которых
Код: plaintext
1.
2.
            PSEVD2.abfam = PSEVD1.abfam 
            and PSEVD2.abname = PSEVD1.abname 
            and PSEVD2.abotch = PSEVD1.abotch
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32213824
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо....Все работает :)
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32213831
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Катерина, либо Вы не захотели подумать и дополнить мой первоначальный вариант, либо незаметили или невнимательно проанализировали вариант Dnico, который доработал его за Вас, либо в этом форуме неправильно поставили задачу.

Задачу Вы сформулировали, насколько я понял, следующим образом:
Вытащить все повторяющиеся записи столько раз сколько они повторяются.
Причём у этих записей могут совпадать сразу три поля:
abfam, abname, abotch .
К тому-же критична скорость выполнения на большой БД.

Ну так что-же Вам мешает воспользоваться предложенной Dnico хранимой процедурой.
Если Вам непонятен его текст в общем виде, привожу в конкретном.

create procedure SP_PROC
returns(
id_out integer,
fam_out varchar(n1),
name_out varchar(n2),
otch_out varchar(n3)
)as
declare variable
fam varchar(n1);
declare variable name varchar(n2);
declare variable otch varchar(n3);
begin

for select s1.abfam, s1.abname, s1.abotch, count(*)
from spr s1
group by s1.abfam, s1.abname, s1.abotch
having count(*) > 1
into :fam, :name, :otch
do
for select s2.id, s2.abfam, s2.abname, s2.abotch
from spr s2
where (s2.abfam = :fam)
and (s2.abname = :name)
and (s2.abotch = :otch)
into :id_out, :fam_out, :name_out, :otch_out
do
suspend;

end


Поскольку здесь нет подзапросов - выполняется быстро.
Вариант Timujin тоже хорош, когда совпадение по одному полю.
У Вас их несколько. Поэтому N подзапросов впоследствии неудобно будет анализировать. К тому-же работать N будет медленне, чем 1 или 2.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32213837
Катерина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока непонятен. Не буду скрывать....
Буду разбираться....
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32213848
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Zmeishe
>> Вариант Timujin тоже хорош, когда совпадение по одному полю.

Мой вариант работает, когда совпадение по любому кол-ву полей Ж:(
См. выше на запросы
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32214103
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timujin
>> Мой вариант работает, когда совпадение по любому кол-ву полей Ж:(

В том, что работает нисколько не сомневаюсь.

Но N подзапросов проанализировать, например через год будет сложно. Тем более, если будешь заниматься уже другой задачей и придётся вновь дорабатывать эту. Или если вместо тебя эту задачу будет сопровождать другой программист.

for select
...
do
for select
...
do
читается и анализируется легче чем

select
...
where (select .... where)
and (select .... where)

Смысл термина 'читабельность', ещё никто не отменял.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #32214129
Timujin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Zmeishe
К критике отношусь положительно, но тут я не согласен. Какой код понятнее:

Zmeishe
Код: 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.
create procedure SP_PROC 
returns( 
id_out integer, 
fam_out varchar(n1), 
name_out varchar(n2), 
otch_out varchar(n3) 
)as 
declare variable fam varchar(n1); 
declare variable name varchar(n2); 
declare variable otch varchar(n3); 
begin 
for select s1.abfam, s1.abname, s1.abotch, count(*) 
from spr s1 
group by s1.abfam, s1.abname, s1.abotch 
having count(*) >  1  
into :fam, :name, :otch 
do 
for select s2.id, s2.abfam, s2.abname, s2.abotch 
from spr s2 
where (s2.abfam = :fam) 
and (s2.abname = :name) 
and (s2.abotch = :otch) 
into :id_out, :fam_out, :name_out, :otch_out 
do 
suspend; 

end 


или Timujin
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select PSEVD1.abfam,PSEVD1.abname,PSEVD1.abotch,
         PSEVD1.fckey,PSEVD1.sckey 
from ab PSEVD1
where (select count(PSEVD2.abfam) from ab PSEVD2 
          where PSEVD2.abfam = PSEVD1.abfam 
            and PSEVD2.abname = PSEVD1.abname 
            and PSEVD2.abotch = PSEVD1.abotch) >  1  
order by PSEVD1.abfam, PSEVD1.abname, PSEVD1.abotch 


Если я не прав, напиши мне, ALL
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Выборка повторяющихся записей
    #39030176
wh1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wh1
Гость
друзья, помогите, не могу разобраться. Прочитал, попытался сделать как тут, не выходит... Проблема следующая:

1. Есть таблица, в которую заносятся данные о выплатах с проекта, а именно ник пользователя (user) и кошелек (purse)
2. В таблицу заносятся изо дня в день выплаты, и ник может повторяться.
3. Необходимо найти те ники пользователей, которые заносят выплаты на одинаковые кошельки. Поиск мультиаккаунтов. Нужен запрос.

Мучился ппц сколько. Получается не особо хорошо, то выводит список всех выплат, то не выводит вообще. Запрос использовал следующий:

$db->Query("SELECT *, db_payment.purse upurse FROM db_payment WHERE purse IN (SELECT purse FROM db_payment GROUP BY purse HAVING COUNT(*) > 1) ORDER BY purse ");

выводит примерно так:


а надо так:



То есть показать не все выплаты на эти кошельки, а только по одной записи, если такие встречаются.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #39030232
stelvic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wh1,

если я тебя правильно понял то это должно помочь:
Код: plsql
1.
select user, purse from db_payment group by user, purse having count(*)>1



Такие древние топики не стоит поднимать, хотя задача и похожа немного.
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #39030327
wh1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wh1
Гость
stelvicwh1,

если я тебя правильно понял то это должно помочь:
Код: plsql
1.
select user, purse from db_payment group by user, purse having count(*)>1



Такие древние топики не стоит поднимать, хотя задача и похожа немного.

Спасибо, но не помогло (( Посижу, поломаю еще голову...
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #39030337
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wh1Спасибо, но не помогло
Что, "очки не действуют никак"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка повторяющихся записей
    #39030414
wh1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wh1
Гость
Dimitry Sibiryakovwh1Спасибо, но не помогло
Что, "очки не действуют никак"?..

Не понял тебя.
???
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка повторяющихся записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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