powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird - Выгрузка случайных строк
25 сообщений из 33, страница 1 из 2
Firebird - Выгрузка случайных строк
    #38987761
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Есть задачка, но не могу ее решить.
Есть таблица с врачами, пациентами и лечениями. (doctor(dcode),clients(pcode),treat(dcode,pcode,treatdate))
Необходимо выгрузить 30 случайных врачей за прошлый день. Потом к каждому врачу по 3 случайных пациента.

Получаю 30 случайных врачей:
select first 30 distinct t.dcode from treat t where t.treatdate between :data and :data order by rand()

Потом привязываю к ним всех пациентов за эту дату:
select distinct d.fullname,c.fullname
from
(select first 30 distinct t.dcode dcode from treat t where t.treatdate between :data and :data order by rand()) doc
left join doctor d on doc.dcode = d.dcode
left join treat t on t.dcode = d.dcode
left join (select t.pcode pcode, t.dcode dcode from treat t where t.treatdate between :data and :data ) client on client.pcode = t.pcode and client.dcode = doc.dcode
left join clients c on c.pcode = client.pcode
where t.treatdate between :data and :data

Получается 30 врачей со всеми своими пациентами. Как мне оставить по 3 записи pcode(пациента) для каждого dcode(врача)?
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38987824
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.,

бред какой-то
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38987836
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бред в чем, в задаче или в коде? Если в коде, не спорю, первое что пришло на ум.
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38987876
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.,

в задаче
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38987888
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какая бы задача не была, но она есть.
Необходимо для статистики получить 30 случайных врачей с 3 пациентами.
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38987918
MrCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
знаем мы эту статистику
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988031
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как мне получить желаемое?
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988044
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сперва нужно четко сформулировать критерии отбора этих самых записей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988076
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.,
Ну может как-то вот так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select distinct D.Fullname, C.Fullname
  from (select first 30 distinct T.Dcode Dcode
          from Treat T
          where T.Treatdate = :Data
          order by rand()) Doc

    left join(select first 3 P.Pcode
                from Treat P
                where T.Treatdate = :Data
                  and P.Dcode = Doc.Dcode
                order by rand()) Client on 1 = 1

    left join Doctor D on D.Dcode = Doc.Dcode
    left join Clients C on C.Pcode = Client.Pcode 
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988119
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для чего это нужно. Клиника осуществляет прием пациентов. Руководство хочет знать отзывы от самих пациентов. Отзывы получает call-centr.
Данная выгрузка нужна для call centr-а, чтобы они знали - кого им нужно обзванивать.
Обзванивают они пациентов. У пациента получают информацию по клиники и по врачу, которые его принимал.
Было принято решение сделать выгрузку из БД.
В отчете необходимо видеть:
ФИО Врача1, ФИО пациента1, телефон
ФИО Врача1, ФИО пациента2, телефон
ФИО врача1, ФИО пациента3, телефон
ФИО Врача2, ФИО пациента1, телефон
ФИО Врача2, ФИО пациента2, телефон
ФИО врача2, ФИО пациента3, телефон

Т.е. Для каждого врача необходимо вывести по 3 случайных пациента, которые были у него на приеме в тот день.

Все лечения хранятся в бд treat(строки pcode,dcode,treatdate).
Все врачи хранятся в бд doctor(строки dcode(уникальный номер врача), fullname(ФИО))
Все пациенты хранятся в бд clients(строки pcode(уникальный номер пациента),fullname(ФИО),bdate,phone).

Была идея выгрузить всех врачей с пациентами за определенный день, сделать кол-во строк для каждого доктора по 3 и потом с помощью first и order by rand() отсортировать их случайно.
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988133
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.Была идея выгрузить всех врачей с пациентами за определенный день, сделать кол-во строк для каждого доктора по 3 и потом с помощью first и order by rand() отсортировать их случайно.

Отличная идея. Как раз для temp table.
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988151
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m,

Спасибо что откликнулись. Я подобное пробовал, тут не получается
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select distinct D.Fullname, C.Fullname
  from (  select first 30 distinct t.dcode dcode
          from Treat T
          where T.Treatdate between :data and :data
          order by rand()) Doc

    left join(select first 3 p.dcode dcode
                from Treat P
                where P.Treatdate between :data and :data
                  and P.Dcode = Doc.Dcode -- в этой строке он ругается, т.к. не видит, что раньше она была объявлена.
                order by rand()) Client on 1 = 1
    left join Doctor D on D.Dcode = Doc.Dcode
    left join Clients C on C.Pcode = Client.Pcode




З.Ы Firebird 2.5.2
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988155
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pastor,

Хорошо, тогда подскажите пожалуйста по поводу автор сделать кол-во строк для каждого доктора по 3
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988170
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.не получается
Ну так перестань впихивать невпихуемое и пиши простенький Execute Block с тривиальным
вложенным FOR SELECT.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988193
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.,
Ну да действительно ругается
значит так не судьба

зы. тогда прислушайся к совету Dimitry Sibiryakov
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988204
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.,

SELECT d.dcode, c.pcode
FROM treat t
JOIN (SELECT dcode FROM doctor ORDER BY UUID_TO_CHAR(GEN_UUID()) ROWS 30) d ON d.dcode = t.dcode
JOIN (SELECT pcode FROM clients ORDER BY UUID_TO_CHAR(GEN_UUID()) ROWS 3) c ON c.dcode = d.dcode
WHERE t.treatdate between :data and :data

вроде так
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988220
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Спасибо, будем пробовать. Если вас не затруднит не большой шаблон, пример или направление куда копать.
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988223
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaratIsk,
Код: sql
1.
2.
3.
4.
5.
SELECT d.dcode, c.pcode 
FROM treat t 
JOIN (SELECT dcode FROM doctor ORDER BY UUID_TO_CHAR(GEN_UUID()) ROWS 30) d ON d.dcode = t.dcode
JOIN (SELECT pcode FROM clients ORDER BY UUID_TO_CHAR(GEN_UUID()) ROWS 3) c ON c.dcode = d.dcode -- в таблице clients нету строки dcode, только pcode
WHERE t.treatdate between :data and :data
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988232
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.MaratIsk,
Код: sql
1.
2.
3.
4.
5.
SELECT d.dcode, c.pcode 
FROM treat t 
JOIN (SELECT dcode FROM doctor ORDER BY UUID_TO_CHAR(GEN_UUID()) ROWS 30) d ON d.dcode = t.dcode
JOIN (SELECT pcode FROM clients ORDER BY UUID_TO_CHAR(GEN_UUID()) ROWS 3) c ON c.dcode = d.dcode -- в таблице clients нету строки dcode, только pcode
WHERE t.treatdate between :data and :data



хорошо а где еще pcode ?
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988244
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.Если вас не затруднит не большой шаблон, пример или направление куда
копать.
Это надо понимать как "документацию я не читал и не собираюсь, дайте готовый код чтобы его
можно было скопипастить"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988245
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaratIsk,

Все лечения хранятся в бд treat(столбцы pcode,dcode,treatdate).
Все врачи хранятся в бд doctor(столбцы dcode(уникальный номер врача), fullname(ФИО))
Все пациенты хранятся в бд clients(столбцы pcode(уникальный номер пациента),fullname(ФИО),bdate,phone).
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988250
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Готовый я не прошу, т.к. пока сам не напишешь, никогда не научишься. Не большой пример, алгоритм, последовательность, мб операторы которые пригодятся. Даже хороший help подойдет.
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988273
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Денис П.!
You wrote on 19 июня 2015 г. 15:52:16:

Денис П.> Даже хороший help подойдет.
http://www.firebirdsql.org/file/documentation/reference_manuals/Firebird_Language_Reference_RUS.pdf
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988275
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис П.Даже хороший help подойдет.
А официальный
Language
Reference
для тебя недостаточно хорош?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firebird - Выгрузка случайных строк
    #38988278
Денис П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм, не видел его, спасибо!
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird - Выгрузка случайных строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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