SQL: выбор нескольких строк на группу - PullRequest
0 голосов
/ 05 августа 2009

У меня есть несколько записей в моей таблице 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 Ответ

1 голос
/ 05 августа 2009

Я предполагаю, что английский не ваш родной язык, но как насчет:

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

... или что бы это ни значило "is s1"

Rob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...