【问题标题】:I want to a Unique query with two columns from different tables我想要一个具有来自不同表的两列的唯一查询
【发布时间】:2021-02-25 15:26:06
【问题描述】:

我想要一个显示会议日期和活动参与者姓名的查询。在每一行中显示会议日期和活跃参与者。他们来自不同的桌子。桌子会议只存储参加会议的参与者。 第一个查询就像(桌会):

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. 2020 年 1 月 20 日
  2. 2020 年 4 月 10 日
  3. 2020 年 7 月 20 日
  4. 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 等字段。

【问题讨论】:

  • 请提供 2 个表的 CREATE TABLE 语句和一些示例数据。会议与其参与者之间是否存在某种关系(不仅仅是日期)?会议只持续一天吗?两个会议不能重叠日期吗?
  • 我只是解决这个查询我给你看一个例子。

标签: sql postgresql


【解决方案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

在这个查询中,我使用函数 unnest() 结合函数 string_to_array() 将 dir_director 中的所有行放在一行中。我使用 except 来比较两个子查询:一个查询是活跃的参与者,另一个是会议的礼物。这除了减去这两个子查询。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2023-01-08
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多