#sql #postgresql
#sql #postgresql
Вопрос:
Я хочу запрос, который показывает дату собрания и имя активных участников. В каждой строке отображаются даты собрания и активные участники. они из разных таблиц.В таблице meeting хранятся только участники, которые посещают собрание. Первый запрос похож на (собрание таблиц):
Select m.date_meet as meeting date from meeting m where m.date_meet between
'1-1-2020' and '10-09-2020'
а другой выбор (участники таблицы) :
select p.participants_name as participant name from participants p where p.start <
'some_unique_Date' and p.end > 'some_unique_date'
Другой пример :
представьте, что результатом этого запроса является 4 строки select m.date_meet as meeting date from meeting m where m.date_meet between '1-1-2020' and '10-09-2020'
, подобные :
дата встречи
- 1-20-2020
- 4-10-2020
- 7-20-2020
- 9-25-2020
Итак, для каждой строки передайте его для второго запроса :
select p.participants_name from participants p where p.start <
‘some_unique_Date’ и p.end> ‘some_unique_date’
это означает:
select p.participants_name as participant name from participants p
where p.start < '1-20-2020' and p.end > '1-20-2020'
select p.participants_name as participants name from participants p
where p.start < '4-10-2020' and p.end > '4-10-2020'
select p.participants_name as participants name from participants p
where p.start < '7-20-2020' and p.end > '7-20-2020'
etc .. .
И результат, который я хочу, это что-то вроде :
meeting date | Active Participants name
1. 1-20-2020 | john , Eduards, mike, Daniel, Maria
2. 4-10-2020 | Eduards, mike, Daniel,Maria Ali
3. 7-20-2020 | john , Eduards, mike, Maria, Ali, Joe, Carls
4. 9-25-2020 | Mike, Maria, Louise, Anna, Cristopher, Elton
у участников таблицы есть такие поля, как звезда, конец и имя. это означает начало активации участника, конец периода активации участника и имя.
В таблице собрания есть такие поля, как date_meeting , number_meeting, participants_meeting .
Комментарии:
1. Пожалуйста, предоставьте инструкции CREATE TABLE для 2 таблиц и некоторые примеры данных для них. Существует ли какая-либо связь между собранием и его участниками (кроме дат)? Собрание длится всего один день? Не могут ли 2 собрания перекрывать даты?
2. Я просто разрешаю этот запрос, я показываю вам пример.
Ответ №1:
Я просто разрешаю его, выполняя один запрос. в поле выбора я выполнил другой запрос.
select number_meet , date_meet ,
meet_particip ,
array((select unnest(string_to_array(string_agg(LOWER(dir.dir_diretor),','),',')) FROM srd_diretoria dir WHERE
dir.dir_start < date_meet ANd (dir.dir_end is null OR
dir.dir_end > red_date_meet) aND dir.dir_diretor is not null ) except select unnest
(( array_remove(regexp_split_to_array( srd_diretores_particip, '#'), '') )) )
as " Ausentes " from meeting
where date_meet > '1-1-2020' and date_meet < '31-12-2020'
order by number_meet , date_meet
В этом запросе я помещаю все строки из dir_diretor в одну строку, используя функцию unnest() в сочетании с функцией string_to_array() . Я использовал исключение для сравнения двух подзапросов: один запрос — это активные участники, другой — подарки для собрания. это исключение вычитает эти два подзапроса.