所以我的情况是我有一个" Calls"和相应的"图像"由列#34; CallId"。
链接所以我有3个电话:
所以目前我可以使用Sql Where Id In
来获取这3个调用的所有图像:
Select * from [Images] Where CallId in (1,2,3)
现在返回3次调用的所有Images
,但在我的应用中,我只显示top 2
因此每次调用只能返回2张图片
我试过了:
Select * from [Images] Where CallId in (1,2,3) Limit 2
但是这只能返回2张图片我最多要找6张图片?
E.g。 使用我的示例我想运行一些将返回的SQL
答案 0 :(得分:1)
您可以使用Row_Number功能。以下查询将返回每次调用的前2个图像(假设有一个Colum Called ImgId - 将其更改为您要订购的任何列)
SELECT
*
FROM
(
SELECT
SeqNo = (SELECT COUNT(1) FROM [Images] WHERE CallId = i.CallId and ImgId >= I.ImgId ),
*
FROM [Images] i
)q
WHERE SeqNo <3
如果您需要任何其他计数,那么只需将Where条件更改为您希望的任何数字。您还可以在其中使用变量,以使其更具动态性和通用性
答案 1 :(得分:1)
由于sqlite中没有窗口函数,因此您需要使用自联接。此解决方案假定每个图像都有一个唯一的id
,并根据datetaken
属性对其进行排序(正如您在评论中提到的那样)
select t.callid, t.id
from
(
select i1.callid, i1.id, count(*) row_count
from image i1
join image i2 on i1.CallId = i2.CallId and
i1.datetaken <= i2.datetaken and
i1.callid in (1,2,3)
group by i1.callid, i1.id
) t
where t.row_count <= 2
上述解决方案找到了每datetaken
个callid
值最高的2张图片。如果您需要最低使用率i1.datetaken >= i2.datetaken
。如果您在callid中具有相同datetaken
值的图像(此解决方案对应于dense_rank()
),则可能会出现此问题。如果这足够,请告诉我。 row_number()
的自我加入条件会更复杂。