2013-04-15 146 views
0

我想找到那些“rsp_ver”以2.0或更多而不是1.0开头的情况。我想我可以使用条件在where子句中找出​​与rsp_ver代码标识了“1.0”的一个子查询发现:sql min()在哪里

select 
    trim(INS.fst_name) || ' ' || Trim(INS.lst_name) as name, 
    IDS.rin, 
    RSP.unit_id, 
    RSP.indv_id, 
    RSP.rsp_id, 
    RSP.rsp_sqnm, 
    RSP.rsp_ver, 
    cast(RSP.post_ts as char(16)) as Post, 
    RSP.post_audit_id 
from 
    dhsdb2.wvs_rsp RSP 
    join dhsdb2.indv_name_srch INS on RSP.indv_id = INS.indv_id 
    join dhsdb2.indv_demg_srch IDS on RSP.indv_id = IDS.indv_id 
where 
    RSP.indv_id in 
    (select 
     SRSP.indv_id 
    from 
     dhsdb2.wvs_rsp SRSP 
    where 
     SRSP.indv_id = RSP.indv_id and 
     SRSP.rsp_ver > '1.0') 
    and rsp.clse_ts is null 
order by 
    RSP.rsp_ver; 

这并没有当然的工作。后来我想,我需要的是内部查询有最小的功能,但我跑INT

+1

您可以向我们展示您的表格架构吗? –

+0

别名'DRSP'从哪里来?在'DRSP.indv_id'中,我没有在你的表格中看到它? –

+0

查询不起作用? –

回答

0

Where条款,以列作为number比较而不是字符串

select 
    trim(INS.fst_name) || ' ' || Trim(INS.lst_name) as name, 
    IDS.rin, 
    RSP.unit_id, 
    RSP.indv_id, 
    RSP.rsp_id, 
    RSP.rsp_sqnm, 
    RSP.rsp_ver, 
    cast(RSP.post_ts as char(16)) as Post, 
    RSP.post_audit_id 
from 
    dhsdb2.wvs_rsp RSP 
    join dhsdb2.indv_name_srch INS on RSP.indv_id = INS.indv_id 
    join dhsdb2.indv_demg_srch IDS on RSP.indv_id = IDS.indv_id 
where 
    RSP.indv_id in 
    (select 
     SRSP.indv_id 
    from 
     dhsdb2.wvs_rsp SRSP 
    where 
     DRSP.indv_id = RSP.indv_id and 
     SRSP.rsp_ver > 1.0) 
    and rsp.clse_ts is null 
order by 
    RSP.rsp_ver; 
1

假设取出' 。具有以下

RSP.indv_id in 
    (select 
     SRSP.indv_id 
    from 
     dhsdb2.wvs_rsp SRSP 
    where 
     SRSP.indv_id = RSP.indv_id and 
     SRSP.rsp_ver > '1.0') 

:即rsp_ver总是在[主要版本]的格式[其他版本信息],则可以将WHERE子句中取代嵌套查询

CAST(SUBSTRING(RSP.rsp_ver, 1, CHARINDEX('.', RSP.rsp_ver)-1) AS INT) >= 2 

这从rsp_var柱得到主要版本部分,将其转换为INT,然后只返回其主要版本号为2或更高的行。

当您的版本号具有多个小数(即2.0.1)时,这比简单地将rsp_ver转换为数字值有好处。缺点是它只检查当前版本的主要版本。

如果您需要更细化过滤,可以创建Common Table Expression,从rsp_ver列中选择不同版本的零件以及indv_id,然后加入该查询。