sql min()在哪里

时间:2013-04-15 17:40:03

标签: sql subquery min

我想找到“rsp_ver”以2.0或更高而不是1.0开头的情况。我想我可以在where子句中使用条件来查找子查询找到的带有“1.0”的rsp_ver代码的ID:

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;

这当然没有用。然后我认为我需要内部查询来获得min函数,但我运行了int

2 个答案:

答案 0 :(得分:1)

假设rsp_ver始终采用[主要版本]。[其他版本信息]的格式,您可以替换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')

以下内容:

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,然后加入那个问题。

答案 1 :(得分: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;