Как вернуть последние 9 результатов для каждой лошади - PullRequest
0 голосов
/ 29 мая 2019

У меня есть запрос через sql, который перечисляет все выступления лошадей для предыдущих гонок. Я хотел бы просто перечислить их последние 9 выступлений.

Я некоторое время пытался найти ответ на различных сайтах, но не могу найти подходящий. Буду признателен за любую помощь.

SELECT Form1.Horse, Form1.Date, Form1.[Mile Rate], Form1.[Beaten M], Form1.Distance, Form1.[M or S], Form1.[Class], Form1.[1Q], Form1.[2Q], Form1.[3Q], Form1.Bar, Form1.Driver, Form1.Comment, Form1.Trainer, Form1.Adj, Form1.[Race%], Form1.[Bell Pos], Form1.Pegs, Form1.[Adj LH], Form1.[M LastL], Form1.[Track]
FROM Form1
WHERE Horse in ('SOHO PICASSO','LITTLE BITOF FUN','BEEJAYS STAR','MISS STARFIRE','MEDIEVAL MAN','BLUE STONE','SOHO MAJOR PLAYER NZ','HUMBLE FELLA','STARS OF GOLD','MISS SERENA','MISS MARGARETA','NIGHTWATCH STAR','PURE IMAGE','VILLAGE BENNY','CAPTAIN CROISSANT','JESSIE JOAN','THE GLASS CEILING','BROOK PARKS LAST','ANTAGONISTIC NZ');

1 Ответ

1 голос
/ 29 мая 2019

Использование функции ROW_NUMBER .

SELECT*
FROM(
  SELECT Form1.Horse, Form1.Date, Form1.[Mile Rate], Form1.[Beaten M], Form1.Distance, Form1.[M or S], Form1.[Class], Form1.[1Q], Form1.[2Q], Form1.[3Q], Form1.Bar, Form1.Driver, Form1.Comment, Form1.Trainer, Form1.Adj, Form1.[Race%], Form1.[Bell Pos], Form1.Pegs, Form1.[Adj LH], Form1.[M LastL], Form1.[Track]
    ,ROW_NUMBER() OVER(PARTITION BY Horse ORDER BY Date) rn
  FROM Form1
  WHERE Horse in ('SOHO PICASSO','LITTLE BITOF FUN','BEEJAYS STAR','MISS STARFIRE','MEDIEVAL MAN','BLUE STONE','SOHO MAJOR PLAYER NZ','HUMBLE FELLA','STARS OF GOLD','MISS SERENA','MISS MARGARETA','NIGHTWATCH STAR','PURE IMAGE','VILLAGE BENNY','CAPTAIN CROISSANT','JESSIE JOAN','THE GLASS CEILING','BROOK PARKS LAST','ANTAGONISTIC NZ')
)T
WHERE rn <= 9

Если ваша БД не поддерживает ROW_NUMBER, используйте этот запрос:

SELECT Form1.Horse, Form1.Date, Form1.[Mile Rate], Form1.[Beaten M], Form1.Distance, Form1.[M or S], Form1.[Class], Form1.[1Q], Form1.[2Q], Form1.[3Q], Form1.Bar, Form1.Driver, Form1.Comment, Form1.Trainer, Form1.Adj, Form1.[Race%], Form1.[Bell Pos], Form1.Pegs, Form1.[Adj LH], Form1.[M LastL], Form1.[Track]
FROM (
  SELECT t1.Horse, t1.Date, COUNT(*) AS rn
  FROM Form1 AS t1
  INNER JOIN Form1 AS t2
  ON t2.Horse = t1.Horse
  AND t2.Date >= t1.Date
  GROUP BY t1.Horse, t1.Date
  HAVING COUNT(*) <= 9
)t
INNER JOIN Form1
ON Form1.Horse = t.Horse
AND Form1.Date = t.Date

Внутренний запрос имитирует ROW_NUMBER и фильтрует строки с rn <= 9.

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