为 sql 中的每个“IN”语句获取 1 个结果

Posted

技术标签:

【中文标题】为 sql 中的每个“IN”语句获取 1 个结果【英文标题】:Fetching 1 result for each ‘IN’ statement in sql 【发布时间】:2019-11-07 15:26:31 【问题描述】:

我有一张大桌子,里面有很多记录。我想为查询中IN() 中的每个项目获取一条记录

例子:

select dccid, marketid from market where marketid in ('1','2','3'...)

market 表中,每个marketid 都有很多记录,但我只需要每个市场的 1 条记录。

我该怎么做?

【问题讨论】:

您使用的是 mysql 还是 MS SQL Server? marketid 是 int 还是 string? 您好,欢迎来到***。当您说每个 where in 子句有很多记录但您只想要一个日期时,您的意思是您需要添加另一个 whereclause 还是您想要最近的日期? "sql" 没有回答这个问题。 MySql 和 Sql Server 是两种不同类型的数据库,它们都使用 SQL 语言,但使用不同的语言方言直接回答这个问题。 您需要在此处提供一些说明。什么是输入,什么是预期输出?听起来你想生成一个分隔列表???可能是minimal reproducible example 的时间了 【参考方案1】:

你可以使用窗口函数:

select m.*
from (select m.*,
             row_number() over (partition by market_id order by market_id) as seqnum
      from market m
      where market_id in ( . . . )
     ) m
where seqnum = 1;

您可以更改order by 以获取特定 行——第一行、最后一行等等。

也就是说,我不明白为什么您会在名为market 的表中重复market_ids。看起来应该是主键。

【讨论】:

对于 1 个市场 id,表中有多个 dcid,我需要一个记录,每个市场都有 dcid @user12338558 这就是row_number() 的用途......但我们仍然需要知道您使用的是什么数据库,因为 GA MySql 版本仅在去年才支持此功能,而且还有很多真实的MySql 安装尚未更新到足够新的版本来支持此功能。

以上是关于为 sql 中的每个“IN”语句获取 1 个结果的主要内容,如果未能解决你的问题,请参考以下文章

SQL中CASE WHEN THEN的用法

让sql语句不排序,按照in语句的顺序返回结果

sql语句中条件查询里in、like、及=三个的效率怎么样?

sql in怎么根据in的顺序排列查询结果

sql in 字符串

sql语句 不让结果排序,按照in语句的顺序返回结果