只需使用外连接,其次您需要在 info_table 而不是 stats 表上设置条件,因为 stats_table 的数据较少[,所以我将编写这个查询:
select *
FROM stats_table a, info_table e
where a.WCEL_ID(+) = e.WCEL_ID
and e.period_start_time >= Trunc(sysdate-7) and e.WCEL_ID = '14000004554984'
请注意我对 "and e.period_start_time >= Trunc(sysdate-7) and e.WCEL_ID = '14000004554984'" 所做的更改,这是基于 info_table 具有所有数据并且 stats_table 可能缺少数据的假设被你声明了。
编辑:用户评论后编辑查询
select *
FROM stats_table a, info_table e
where a.WCEL_ID(+) = e.WCEL_ID
and a.period_start_time >= Trunc(sysdate-7) and e.WCEL_ID = '14000004554984'
编辑:
再三考虑,我认为查询不完整,info_table 中必须有一个日期列,否则您无法在 2 个表中按日期行映射数据[没有这个,您将无法实现您想要的]。考虑到这个假设,我正在修改查询如下:
select *
FROM stats_table a, info_table e
where a.WCEL_ID(+) = e.WCEL_ID
and e.period_start_time >= Trunc(sysdate-7) and e.WCEL_ID = '14000004554984'
and a.period_start_time(+) = e.period_start_time
编辑:我现在明白你的意思了。您希望每天都有一行,如果当天存在数据,那么应该显示它,否则应该出现 null。我修改了我的逻辑以包含一个嵌套查询 [具有别名 b],它将为过去 7 天的每一天生成行并将其与您的主表进行外部连接。试试这个,让我知道它是否能解决您的问题。
SELECT *
FROM stats_table a,
info_table e,
(SELECT to_date(sysdate-7,'dd-mon-yyyy') +rownum dates
FROM all_objects
WHERE rownum <= to_date(sysdate,'dd-mon-yyyy')-to_date(sysdate-7,'dd-mon-yyyy')
) b
WHERE a.WCEL_ID = e.WCEL_ID
AND a.period_start_time(+) = b.dates
AND a.WCEL_ID = '14000004554984'