';或';位于';分组依据';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日,那么结果中不会出现空值。