为 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
子句有很多记录但您只想要一个日期时,您的意思是您需要添加另一个 where
clause 还是您想要最近的日期?
"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_id
s。看起来应该是主键。
【讨论】:
对于 1 个市场 id,表中有多个 dcid,我需要一个记录,每个市场都有 dcid @user12338558 这就是row_number()
的用途......但我们仍然需要知道您使用的是什么数据库,因为 GA MySql 版本仅在去年才支持此功能,而且还有很多真实的MySql 安装尚未更新到足够新的版本来支持此功能。以上是关于为 sql 中的每个“IN”语句获取 1 个结果的主要内容,如果未能解决你的问题,请参考以下文章