【问题标题】:SQL Query building , require suggestionSQL查询构建,需要建议
【发布时间】:2021-02-01 13:25:41
【问题描述】:

您能帮我解决以下问题吗,

我已经通过以下两个三个表连接查询了一个结果集,

我的要求是每个帐户在 2017 年 7 月 1 日之后获得两个条目,在 2017 年 7 月 1 日之前获得两个条目。

例如附上的屏幕截图,绿色行应该出现在最终结果中。

请帮忙

【问题讨论】:

    标签: mysql sql resultset


    【解决方案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
    

    【讨论】:

    • 我添加了这段代码,但出现如下错误,
    • 首先,如果我在分区中使用 '
    • @SandipDas 。 . .这应该在 MySQL 中工作,这是您问题上的数据库标签。
    • 是的,仅在 mysql 中,我的意思是 TSQL 查询
    • 现在修复了多部分标识符错误,但仍然不能在 partition by 子句中使用'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多