使用DB2 UDB OLAP函数
2008-09-03 16:28:17 来源:WEB开发网selectSOME_DATEASNOBODY_ON_TRIPFROMDATE_SEQ
whereSOME_DATEBETWEENDATE(’01/01/2003’)ANDDATE(’01/31/2003’)
ANDNOTexists(select*FROMBUSINESS_TRIPwhereSOME_DATEBETWEENDATE_FROMANDDATE_TO);
NOBODY_ON_TRIP
--------------
01/01/2003
01/02/2003
01/03/2003
01/04/2003
01/05/2003
01/11/2003
01/12/2003
01/18/2003
01/19/2003
01/25/2003
01/26/2003
11record(s)selected.
这个查询非常简单。在[article on Pivot Tables]中讨论了一些肯定是更复杂的替代方案。
假设有一个类似的任务:“选择 2003 年 1 月份有两名以上雇员在出差的所有日子”,同样,这里日历表 DATE_SEQ 也提供了一个非常容易的方法:
selectSOME_DATEASTHREE_OR_MORE_ON_TRIPFROMDATE_SEQ
whereSOME_DATEBETWEENDATE(’01/01/2003’)ANDDATE(’01/31/2003’)
AND(selectcount(*)FROMBUSINESS_TRIPwhereSOME_DATEBETWEENDATE_FROMANDDATE_TO)>2;
THREE_OR_MORE_ON_TRIP
-------------------
01/08/2003
同样,如果不能创建辅助表,我们就可以使用表表达式:
selectSOME_DATEASTHREE_OR_MORE_ON_TRIP
FROM
(selectDATE(’01/01/2003’)+ROW_NUMBER()OVER()DAYSASSOME_DATEFROMSYSCAT.TABLES)ASDATE_SEQ
whereSOME_DATEBETWEENDATE(’01/01/2003’)ANDDATE(’01/31/2003’)
AND(selectcount(*)FROMBUSINESS_TRIPwhereSOME_DATEBETWEENDATE_FROMANDDATE_TO)>2;
更多精彩
赞助商链接