SQlite выбрать верхние N строк из таблицы для каждого элемента - PullRequest
0 голосов
/ 19 октября 2018

У меня есть таблица, как показано ниже, и я пытаюсь выбрать 2 верхние строки каждого потока с помощью createDate.

    ID  Name    createdDate(string)
76  Stream1 2018-10-19T00:00:00
76  Stream1 2018-10-18T00:00:00 
76  Stream1 2018-10-17T00:00:00  
70  Stream2 2018-10-17T00:00:00 
70  Stream2 2018-10-03T00:00:00 
70  Stream2 2018-09-22T00:00:00 
21  Stream3 2018-09-21T00:00:00
21  Stream3 2018-09-20T00:00:00 
21  Stream3 2018-08-21T00:00:00 

и вывод выглядит как ниже, как мне построить запрос для этого

76  Stream1 2018-10-19T00:00:00
76  Stream1 2018-10-18T00:00:00 
70  Stream2 2018-10-17T00:00:00 
70  Stream2 2018-10-03T00:00:00 
21  Stream3 2018-09-21T00:00:00
21  Stream3 2018-09-20T00:00:00 

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Начиная с SQLite 3.25 вы можете использовать ROW_NUMBER:

WITH cte AS (
  SELECT *,
    ROW_NUMBER() OVER(PARTITION BY Name
                      ORDER BY CAST(createdDate AS DATE) DESC) AS rn
  FROM tab
)
SELECT *
FROM cte
WHERE rn <= 2;
0 голосов
/ 19 октября 2018

Вы можете использовать row_number():

select t.*
from (select t.*,
             row_number() over (partition by id order by cast(createdDate as date) desc) as seq
      from table t
     ) t
where seq <= 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...