2013-04-15 70 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,然後加入該查詢。