当我只需要一个值时,返回多个值的DB2 SQL函数

当我只需要一个值时,返回多个值的DB2 SQL函数,sql,db2,sql-function,Sql,Db2,Sql Function,我试图用下面的代码获取上次通过sql函数移动项目的位置。非常基本,我只是想抓住最长的日期和时间。如果我以常规方式运行sql,并在ATPRIM中硬编码一个项目编号,那么我只能得到一个位置。但是,如果我创建这个函数,然后尝试运行它,然后向函数传递一个条目号,我会得到历史文件中的每个事件,而不仅仅是最近出现的最大值。我还尝试了一个选择独特的,这并没有做任何事情为我 ATOGST=项目位置 ATPRIM=项目 ATDATE=日期 时间 编辑: 所以我想做的是找到那个位置,然后在我的iSeries上使

我试图用下面的代码获取上次通过sql函数移动项目的位置。非常基本,我只是想抓住最长的日期和时间。如果我以常规方式运行sql,并在ATPRIM中硬编码一个项目编号,那么我只能得到一个位置。但是,如果我创建这个函数,然后尝试运行它,然后向函数传递一个条目号,我会得到历史文件中的每个事件,而不仅仅是最近出现的最大值。我还尝试了一个选择独特的,这并没有做任何事情为我

  • ATOGST=项目位置
  • ATPRIM=项目
  • ATDATE=日期
  • 时间
编辑: 所以我想做的是找到那个位置,然后在我的iSeries上使用strsql,但问题是我们使用了一个称为web对象向导(WoW)的web应用程序,它让我们使用sql生成更加用户友好的报告。下面是我试图开始工作的地方,但select中的子查询在WoW中不起作用,因此我尝试创建一个函数,我们知道它在其他应用程序中也可以使用

SELECT distinct t1.atprim, atdesc, dbtabl, dbdtin, dblife, dblpdp,  
dbcost, dbbas, dbresv, dbyrdp, dbcurr,                              

(select atogst                                                      
from erplxf.qat as t2                                               
where t1.atprim = t2.atprim and atdate = (select max(atdate) from   
erplxf.qat as t3 where t2.atprim = t3.atprim) and attime = (select  
max(attime) from erplxf.qat as t4 where t1.atprim = t4.atprim and   
t1.atdate = t4.atdate)                                              
) as @113_ToLoc                                                     

FROM erplxf.qat as t1 join erplxf.qdb on atassn = dbassn            
where dbrcid = 'DB'                                                   
and dbcurr != 0
因此,它不是select末尾的子查询,而是

, erplxu.f@qat1(atprim) as @113_ToLoc
试试这个:

CREATE FUNCTION ERPLXU/F@QAT1(AATPRIM VARCHAR(10))                
RETURNS CHAR(50)                                            
LANGUAGE SQL                                                                                                 
RETURN                                            
SELECT ATOGST                                        
FROM ERPLXF/QAT                      
WHERE ATPRIM = AATPRIM               
ORDER BY ATDATE DESC, ATTIME DESC
FETCH FIRST 1 ROW ONLY;

你如何使用这个功能?显示该查询。你有没有想过为这个查询创建一个视图?这个查询实际上是一个查询(
n
1
,而
最大的
是“最近的日期”)。请注意,如果可能的话,您应该合并日期/时间字段,以便进行更简单和(通常)更快的查询。@data\u henrik我做了一次编辑,如果需要澄清任何事情,请告诉我,我对视图不熟悉,因此我必须阅读它们相同的结果为我提供此表的4列示例数据,所需的结果,这个函数的结果。
CREATE FUNCTION ERPLXU/F@QAT1(AATPRIM VARCHAR(10))                
RETURNS CHAR(50)                                            
LANGUAGE SQL                                                                                                 
RETURN                                            
SELECT ATOGST                                        
FROM ERPLXF/QAT                      
WHERE ATPRIM = AATPRIM               
ORDER BY ATDATE DESC, ATTIME DESC
FETCH FIRST 1 ROW ONLY;