因此,我有一个由"CallId“列链接的”调用“列表和相应的”图像“。
所以我有三个电话:
因此,目前我可以使用如下所示的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张图片?
例如,使用我的示例.,我想运行一些返回的SQL。
发布于 2017-11-03 10:58:32
由于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上面的解决方案找到了两个图像,每个callid的datetaken值最高。如果您需要最低的使用i1.datetaken >= i2.datetaken代替。如果您的图像具有相同的datetaken值(此解决方案对应于dense_rank()),则可能会出现此问题。如果这足够,请告诉我。row_number()的自连接条件将更加复杂。
发布于 2017-11-03 10:53:17
您可以使用Row_Number特性。下面的查询将返回每个调用的前2张图像(假设有一个名为ImgId的Colum -将其更改为您希望订购的任何列)
SELECT
*
FROM
(
SELECT
SeqNo = (SELECT COUNT(1) FROM [Images] WHERE CallId = i.CallId and ImgId >= I.ImgId ),
*
FROM [Images] i
)q
WHERE SeqNo <3如果您需要任何其他计数2,那么只需将Where条件更改为任何您希望的数字。您也可以在那里使用一个变量,以使它更动态和更通用。
https://stackoverflow.com/questions/47093842
复制相似问题