首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用"where id in“时返回前2条记录

如何在使用"where id in“时返回前2条记录
EN

Stack Overflow用户
提问于 2017-11-03 10:43:57
回答 2查看 38关注 0票数 1

因此,我有一个由"CallId“列链接的”调用“列表和相应的”图像“。

所以我有三个电话:

  • 呼叫,Id 1
    • 图1
    • 图2
    • 图3
    • 图4

  • 呼叫,Id 2
    • 图5

  • 呼叫,Id 3
    • 图6

因此,目前我可以使用如下所示的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。

  • 图1
  • 图2
  • 图5
  • 图6
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-03 10:58:32

由于sqlite中没有窗口函数,所以需要使用自联接。此解决方案假定每个图像都有一个唯一的id,并根据datetaken属性对它们进行排序(正如您在注释中提到的)。

代码语言:javascript
复制
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

上面的解决方案找到了两个图像,每个calliddatetaken值最高。如果您需要最低的使用i1.datetaken >= i2.datetaken代替。如果您的图像具有相同的datetaken值(此解决方案对应于dense_rank()),则可能会出现此问题。如果这足够,请告诉我。row_number()的自连接条件将更加复杂。

票数 1
EN

Stack Overflow用户

发布于 2017-11-03 10:53:17

您可以使用Row_Number特性。下面的查询将返回每个调用的前2张图像(假设有一个名为ImgId的Colum -将其更改为您希望订购的任何列)

代码语言:javascript
复制
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条件更改为任何您希望的数字。您也可以在那里使用一个变量,以使它更动态和更通用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47093842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档