cwui 2024-02-04 09:25 采纳率: 27.8%
浏览 5
已结题

SQL按照关键字去重

img


如上图
ID = 123 有多行(三行),要求仅根据ID去重,且保留CALMONTH最小的那一行,AMOUNT字段的值不考虑。
SYBASE SQL如何写,或提供思路即可。

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-04 09:26
    关注

    引自免费微信小程序:皆我百晓生

    当然,基于您的需求,您想要在SYBASE SQL中根据ID去重,并保留每个ID对应的CALMONTH最小值的行。以下是实现该目标的一种可能的SQL查询方法:

    SELECT MIN(CALMONTH) AS Min_CALMONTH, ID
    FROM YourTableName
    GROUP BY ID
    
    UNION ALL
    
    SELECT CALMONTH, ID
    FROM (
        SELECT *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY CALMONTH ASC) AS rn
        FROM YourTableName
    ) t
    WHERE rn = 1
    

    这里假设表名为YourTableName。上述SQL分为两部分:

    1. 第一个SELECT语句通过GROUP BY对ID进行分组并取各组的最小CALMONTH。
    2. 第二个SELECT语句使用窗口函数ROW_NUMBER()对每个ID按照CALMONTH升序排序,并标记每行的行号(rn),然后只选取rn=1的行,即每个ID中CALMONTH最小的那一行。

    由于SYBASE SQL Server不支持直接在GROUP BY后连接其他字段,所以通常需要结合子查询或窗口函数来实现。不过,请注意SYBASE ASE版本对于窗口函数的支持情况,较旧版本可能不支持ROW_NUMBER()函数,这时可能需要采用其他方法,比如自连接或者临时表等更传统的方法。如果您的环境不支持窗口函数,可以尝试以下方式:

    SELECT T1.ID, T1.CALMONTH
    FROM YourTableName T1
    LEFT JOIN YourTableName T2
    ON T1.ID = T2.ID AND T1.CALMONTH > T2.CALMONTH
    WHERE T2.ID IS NULL
    

    这个查询利用了左连接和空值判断来找到每个ID下CALMONTH没有更小值的记录,从而达到去重并保留最小CALMONTH的目的。请根据实际数据库环境调整代码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月12日
  • 已采纳回答 2月4日
  • 创建了问题 2月4日

悬赏问题

  • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响