我在Db2中有一个名为myTable
的表。
它有几列:
a | b | date1 | date2
---------------------------------------------
1 abc <null> 2014-09-02
2 aax 2015-12-30 2016-09-02
2 bax 2015-10-20 <null>
2 ayx 2014-12-10 2016-02-12
从上面的值可以看出,date1
和date2
也可以具有null
值。
我怎样才能同时得到date1
和date2
?
也就是说,查询的输出应该是2016-09-02,因为这是date1
和date2
中所有日期的最大日期。
我用的是Db2-9。
感谢阅读!
3条答案
按热度按时间xmjla07d1#
如何使用
UNION
查询:另一种选择:
tgabmvqs2#
MAX()
是一个有趣的野兽...它既可以作为标量函数使用,也可以作为聚合函数使用。
所以你真正需要的是
外部
MAX()
是聚合版本,内部是标量版本。jhkqcmku3#
声誉太低,无法评论,但我想扩展Charles提供的解决方案。
1.两个NOT NULL值的MAX
1.如果其中一个值为NULL,则剩余的NOT NULL值
1.如果两个值都为NULL,则结果应该为NULL
对于响应中的每一行。
以下代码将满足所有要求,并为响应中的每个结果返回一行:
如果没有NULLIF(),这里的问题将是,NULL值将返回为'0001-01-01'。
与UNION解决方案相比的另一个优点是,可以使用子选择而不是显式引用DATE 1和DATE 2,引用外部SQL中的列,为SQL结果集中的每行获取两个日期的最大日期值,例如。
为了解决您的原始案例,这里有一个可能的解决方案:
| A类|B|日期1|DATE2|最大日期|
| - ------|- ------|- ------|- ------|- ------|
| 1个|美国广播公司|零|2014年9月2日|2014年9月2日|
| 第二章|阿克斯|二〇一五年十二月三十日|2016年9月2日|2016年9月2日|
| 三个|巴克斯|2015-10-20 2015-10-20|零|2015-10-20 2015-10-20|
| 四个|艾克斯|2014年12月10日|2016-02-12 2016 -02-12|2016-02-12 2016 -02-12|
| 五个|零|零|零|零|