我有两个表Table 1和Table。表2由具有更少的行比表1的数。在这两个表有两个日期列在表2表1和caldate2 caldate1。所以现在我需要加入这两个表,并得到最大的两个日期列,并保持在新表。但是,如果我们内部联接这两个表table1中的这行不存在的表2中不会进入决赛桌。因此,我们需要像一些事情

table1 
left outer join
table2

但有这两个日期具有空值的情况。这样我就可以使用聚结,得到下面的场景正确的数据..

1。排在table1中是不存在的表2中 - >然后在表1中caldate1应该进入决赛桌。

2。排在表1有在表2和表1中的caldate1和表2的caldate2是空 - >然后空应该进入决赛桌的日期列

3。排在表1有在表2和caldate1不是null caldate2为空 - >然后caldate1应该进入决赛桌。

4。排在表1有在表2和caldate1为null,并且caldate2不为空 - >然后caldate2应该进入决赛桌

5。排在表1有在表2和caldate1大于caldate2 - > caldate1应该进入决赛桌

6。排在表1有在表2和caldate2大于caldate1 - > caldate2应该进入决赛桌

我们不需要考虑表2中未与表1匹配的行。所以基本上我需要最新的caldate的所有table1的行如果某行有两个表所示。提前致谢。我没能获得正确的功能做it.Is它凝聚?

有帮助吗?

解决方案 2

我想在做类似下面来满足我的要求的。

SELECT 
a.number,
CASE WHEN ZEROIFNULL(a.caldate1) > ZEROIFNULL(b.caldate2)
THEN a.caldate1  -- This is working
ELSE
b.caldate2
END AS caldate
/*COALESCE (a.caldate1,caldate2) AS caldate*/ -- This is not giving max of dates
FROM 
table1  a
LEFT OUTER JOIN
table2  b
ON
a.number = b.number

感谢您的帮助。现在,它按上述方法进行。

其他提示

从上面的查询,如果一些目前在表2 并没有表1 后,这些记录将被删除,你可以使用全外号码在上面的查询加盟。

或见下面的查询将覆盖该场景也。

sel number,max(date1) from (
  sel number,max(caldate1) as date1
    from table1
  union
  sel number,max(caldate2) as date1
    from table2
)tmp ;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top