簡體   English   中英

SQL:每組選擇多行

[英]SQL: selecting multiple rows per group

我的表tbl1有一些記錄。 有一列s ,我需要根據該列檢索datateime1是舊日期的行。

如果我嘗試下面顯示的查詢,我似乎會得到正確的結果。 現在,我嘗試獲取s1組的兩個最舊的行。 我嘗試在IN子句中添加兩次's1' ,但這不起作用,因為行是由行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

我猜英語不是您的母語,但是呢:

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

...或者意味着“是s1”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM