【发布时间】:2021-02-01 13:25:41
【问题描述】:
您能帮我解决以下问题吗,
我已经通过以下两个三个表连接查询了一个结果集,
我的要求是每个帐户在 2017 年 7 月 1 日之后获得两个条目,在 2017 年 7 月 1 日之前获得两个条目。
例如附上的屏幕截图,绿色行应该出现在最终结果中。
请帮忙
【问题讨论】:
您能帮我解决以下问题吗,
我已经通过以下两个三个表连接查询了一个结果集,
我的要求是每个帐户在 2017 年 7 月 1 日之后获得两个条目,在 2017 年 7 月 1 日之前获得两个条目。
例如附上的屏幕截图,绿色行应该出现在最终结果中。
请帮忙
【问题讨论】:
你可以使用row_number():
with cte as (
<your query here>
)
select cte.*
from (select cte.*,
row_number() over (partition by ac_no, tran_date < '2017-07-01' order by rand()) as seqnum
from cte
) cte
where seqnum <= 2;
注意:这会将 2017-07-01 的交易放在“之后”组中。如果您根本不需要它们,只需在子查询中将它们过滤掉即可。
SQL Server 中的等价逻辑是:
row_number() over (partition by ac_no, case when tran_date < '2017-07-01' then 1 else 2 end order by newid()) as seqnum
【讨论】: