';或';位于';分组依据';postgresql

';或';位于';分组依据';postgresql,postgresql,Postgresql,我有一个查询,检查日期和计数取决于它是哪个月,我需要计算两行并将其分配给相应的月份 我的问题是: SELECT to_char(date_trunc('MONTH', (ret_used.complete_date_sent::date)), 'MM/DD/YYYY') as date_ret_sent, count(ret_used.complete_date_sent), count(ret_used.date_second_sms) AS second_count

我有一个查询,检查日期和计数取决于它是哪个月,我需要计算两行并将其分配给相应的月份

我的问题是:

SELECT 
  to_char(date_trunc('MONTH', (ret_used.complete_date_sent::date)), 'MM/DD/YYYY') as date_ret_sent, 
  count(ret_used.complete_date_sent),   
  count(ret_used.date_second_sms) AS second_count 
FROM ret_used
WHERE ret_used.group_id = 1 
  AND (ret_used.complete_date_sent between '01/01/2019' AND '12/31/2019' OR ret_used.date_second_sms between '01/01/2019' AND '12/31/2019') 
  AND (ret_used.msg_sent = TRUE OR ret_used.second_msg_sent = TRUE)
GROUP BY to_char(date_trunc('MONTH', (ret_used.complete_date_sent::date)), 'MM/DD/YYYY')
ORDER BY date_retention_sent asc
给我一个结果:

date_ret_sent   |  count |  second_count
-------------------------------------------
09/01/2019      |    3   |     1
10/01/2019      |    1   |     0
NULL            |    0   |     1
之所以会发生这种情况,是因为我只按“发送完成日期”上的日期分组,“空”值来自“日期秒短信”,但在第二次计数时,它应该在“2019年1月10日”行

意思是:

date_ret_sent   |  count |  second_count
-------------------------------------------
09/01/2019      |    3   |     1
10/01/2019      |    1   |     1

是否有办法在“分组依据”下添加“或”或其他内容,以将值分配给相应的日期,或者我是否缺少其他内容。

我认为您需要使用
coalesce()
按两个日期中的非空值分组:

SELECT 
  coalesce(
    to_char(date_trunc('MONTH', (ret_used.complete_date_sent::date)), 'MM/DD/YYYY'),
    to_char(date_trunc('MONTH', (ret_used.date_second_sms::date)), 'MM/DD/YYYY')
  ) as date_ret_sent, 
  count(ret_used.complete_date_sent),   
  count(ret_used.date_second_sms) AS second_count 
FROM ret_used
WHERE ret_used.group_id = 1 
  AND (ret_used.complete_date_sent between '01/01/2019' AND '12/31/2019' OR ret_used.date_second_sms between '01/01/2019' AND '12/31/2019') 
  AND (ret_used.msg_sent = TRUE OR ret_used.second_msg_sent = TRUE)
GROUP BY 
  coalesce(
    to_char(date_trunc('MONTH', (ret_used.complete_date_sent::date)), 'MM/DD/YYYY'),
    to_char(date_trunc('MONTH', (ret_used.date_second_sms::date)), 'MM/DD/YYYY')
  )
ORDER BY date_retention_sent asc

在complete\u date\u sent列中是否有空值?是的,“complete\u date\u sent”和“date\u second\u sms”的格式是相同的,您基本上希望通过合并进行分组(可能是空值、回退值)?我认为这对我帮助不大,“date\u second\u sms”的日期不是空的。该值与“完成日期发送”相同。我只需要它知道,如果它们匹配,它应该将其分组在与“complete_date_sent”相同的日期。因此,因为两者都是“2019年1月10日”,所以应该将它们分组在一起。您如何判断空行应与
2019年1月10日
分组,而不是与
2019年1月9日
分组?我认为这对我没有多大帮助,“第二天短信”的日期不是空的。该值与“完成日期发送”相同。我只需要它知道,如果它们匹配,它应该将其分组在与“complete_date_sent”相同的日期。因此,因为两者都是“2019年1月10日”,所以应该将它们组合在一起。如果它们都是2019年1月10日,那么结果中不会出现空值。