SQL:每组选择多行

时间:2009-08-05 05:51:15

标签: sql

我的表tbl1中有一些记录。有一列s,根据该列,我需要检索datateime1是旧日期的行。

如果我尝试下面显示的查询,我似乎得到了正确的结果。现在,我尝试获取s1组中两个最旧的行。我尝试将两次's1'添加到IN子句中,但这不起作用,因为行是由他们的ROWNUMBER选择的。

那么如何重写查询以选择每组灵活的行数(从两个最早的日期开始)?

查询:

SELECT
  tbl2.* 
FROM
  (
   SELECT
     a, b, c, 
     ROW_NUMBER() OVER (PARTITION BY tbl1.s ORDER BY tbl1.Datetime1)) AS RowNo 
   FROM
     tbl1 
   WHERE
     tbl1.s in ('s1','s2','s2','s3','s1','s4')
  ) AS tbl2 
WHERE
  tbl2.rowno = 1

tbl1看起来像:

a          b          c          s      Datetime1
-------------------------------------------------
samp1a     samp1b     samp1c     s1     1/1/2000
samp1a     samp1b     samp1c     s1     2/1/2000
samp1a     samp1b     samp1c     s1     3/1/2000
samp2a     samp2b     samp2c     s2     2/1/2002
samp2a     samp2b     samp2c     s2     3/1/2002
samp3a     samp3b     samp3c     s3     3/1/2000

所需的输出是:

a          b          c          s      p
-------------------------------------------------
samp1a     samp1b     samp1c     s1     1/1/2000
samp1a     samp1b     samp1c     s1     2/1/2000
samp2a     samp2b     samp2c     s2     2/1/2002
samp3a     samp3b     samp3c     s3     3/1/2000

1 个答案:

答案 0 :(得分:1)

我猜英语不是你的第一语言,但是怎么样:

where tbl2.rowno=1 OR (tbl2.rowno = 2 and tbl1.s = s1)

...或者其他意思是“是s1”

罗布