我的表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
答案 0 :(得分:1)
我猜英语不是你的第一语言,但是怎么样:
where tbl2.rowno=1 OR (tbl2.rowno = 2 and tbl1.s = s1)
...或者其他意思是“是s1”
罗布