T SQL,一旦找到我需要的记录就打破了循环

时间:2013-07-02 11:38:59

标签: sql tsql windows-server-2008

我试图使用以下查询从临时表中读取

select
    a,b,c, result, sampleDate
from dbo.abc
where
    a = @la and b = @lb and sampleDate > @lSampleDate and
    resultType in ('sugar','salt','peppers')

我想要实现的是,一旦找到匹配的行,我想停止读取表格,删除刚读取的行并再次搜索表格,找到新值等等。

我知道如何在找到自己的价值观后停止它。 例如

    tsampledate     tResultType                     result
     10/08/2005          cream                        10.9
     10/08/2005          sugar                        10.0
     10/08/2005          Salt                         15.0
     10/08/2005          peppers                      20.0
     21/10/2012          sugar                        21.9
     21/10/2012          salt                         23
     21/10/2012          peppers                      19.3

所以我想用tSampleDate 10/08/2005阅读,打破循环再回到搜索。但循环继续阅读并给我所有的价值。

正在考虑SELECT CASE,但无法弄清楚如何实现。 请帮助。

2 个答案:

答案 0 :(得分:0)

正确的事情是

delete
from dbo.abc
where
    a = @la and b=@lb and sampleDate > @lSampleDate and
    resultType in ('sugar','salt','peppers') 

答案 1 :(得分:0)

假设您正在寻找满足sampleDate>的第一场比赛; @lSampleDate和..

即'10 / 08/2005'然后试试这个

SELECT a,b,c, result, sampleDate 
FROM 
(
  select
    a,b,c, result, sampleDate
    ,DENSE_RANK() OVER(ORDER BY sampleDate) AS rnk
  from dbo.abc
  where
    a = @la and b = @lb and sampleDate > @lSampleDate and
    resultType in ('sugar','salt','peppers')
) t
WHERE rnk=1

检查此排名功能DENSE_RANK