0

我正在尝试使用以下查询从临时表中读取

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 但无法弄清楚如何实现。请提供任何帮助。

4

2 回答 2

0

正确的做法是

delete
from dbo.abc
where
    a = @la and b=@lb and sampleDate > @lSampleDate and
    resultType in ('sugar','salt','peppers') 
于 2013-07-02T11:46:26.740 回答
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

于 2013-07-02T11:56:58.620 回答