如上图
ID = 123 有多行(三行),要求仅根据ID去重,且保留CALMONTH最小的那一行,AMOUNT字段的值不考虑。
SYBASE SQL如何写,或提供思路即可。
引自免费微信小程序:皆我百晓生
当然,基于您的需求,您想要在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分为两部分:
由于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的目的。请根据实际数据库环境调整代码。