首页 > 解决方案 > 不存在日期的 Postgres 查询

问题描述

我有一个可以正常工作的查询,但没有选择不存在的日期

select
    j.job_id as "Job No",
    c.business_name as "Customer",
    to_char(j.date_created, 'DD/MM/YYYY') as "Created Date",
    to_char(min(sc.start_time), 'DD/MM/YYYY') as "Schedule Start",
    to_char(max(sc.end_time), 'DD/MM/YYYY') as "Schedule End",
    to_char(j.date_due, 'DD/MM/YYYY') as "Due Date"
from sampleco_jobs j
join sampleco_customers c
on j.customer_id = c.customer_id
join sampleco_schedules sc
on j.job_id = sc.job_id
where c.customer_id = 29726
group by j.job_id, c.business_name;

每个作业可能有多个计划日期,并且查询正在查找最早和最年轻的计划日期并按 job_id 分组。但是,某些作业尚未开始,并且在计划表中没有现有日期,并且不会显示在结果中。如何让这些显示在结果中?感谢任何帮助。

标签: postgresqlexists

解决方案


空值被 max() 和 min() 函数忽略,因为它们是未知的。

您可以给 null 值 default 以便 max 和 min 可以比较它们:

select
    j.job_id as "Job No",
    to_char(j.date_created, 'DD/MM/YYYY') as "Created Date",
    to_char(min(coalesce(sc.start_time,date'0001-01-01')), 'DD/MM/YYYY') as "Schedule Start",
    to_char(max(coalesce(sc.end_time,date'9999-12-31')), 'DD/MM/YYYY') as "Schedule End",
.....

推荐阅读