从mytable中选择一个简单的*将返回下面的行。我不知道如何在后期绘制表格,所以我要添加图片
我在问题标题中提到: (i)显示按一列排序的前n行(可以使用order by实现) (ii),但它们应该在另一列中是唯一的(由collectionID列唯一)
从mytable中选择* 按lastAccessTime DESC排序;
这将根据表的lastAccessTime降序对表进行排序,如下图所示:
现在,我想根据它们的collectionID过滤这些行。因此,每个collectionID仅1行。我已添加图像。删除线行应被删除。
另外,应该返回前n行(比如说30行)。
我正在使用使用SQLite的Android Room ORM,但要获得所需的结果集,我必须编写正确的查询。
答案 0 :(得分:0)
我认为您这里需要一个窗口函数过滤器。它将根据collectionID分配一个行号,然后您只能为每个collectionID获取1行。您可以尝试-
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY collectionID ORDER BY ID DESC) RN
FROM mytable) T
WHERE RN = 1
LIMIT 30;
答案 1 :(得分:0)
关键思想是使用一个查询“过滤”数据,该查询是另一个查询的源。可以在其他答案中使用窗口函数,但是基本的子查询也已足够:
SELECT *
FROM mytable
INNER JOIN
(SELECT Max(id) AS singleID, collectionID
FROM mytable
GROUP BY collectionID) AS filter
ON mytable.id = filter.singleID
ORDER BY lastAccessTime DESC
LIMIT 30;