| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 91 人关注过本帖
标题:Select语句按记录的原始顺序除重,遇到个问题
取消只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:410
专家分:360
注 册:2013-10-4
结帖率:100%
收藏
 问题点数:0 回复次数:1 
Select语句按记录的原始顺序除重,遇到个问题
希望按记录的原始顺序(注:顺序有些敏感,不能变前后顺序),给Name字段除重,习惯用这种代码:
select * from MyTable A where not exists (select * from MyTable B where B.Name = A.Name and B.ID < A.ID)

现遇到一个问题,当ID字段也有重码时,如何表示?若改为where B.Name = A.Name and B.ID <= A.ID,似乎连自身也排除在外了,结果得到一个空集?

DeepSeek给出3个建议,都是幻觉,没法用。
仍想用一个语句来解决此问题,怎么破?

PS:打算改成这样子,可惜VFP提示出错,找不到M字段或N字段:
select A.*, recno() as M from MyTable A where not exists (select B.*, recno() as N from MyTable B where B.Name = A.Name and (B.ID < A.ID or (B.ID = A.ID and M < N)))

搜索更多相关主题的帖子: 顺序 Select where Name 语句 
4 天前 10:47
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:410
专家分:360
注 册:2013-10-4
收藏
得分:0 
楼上批评得极是!确实是我的问题。

不能用group by,原因是:

其一,这种情况用group by,必然非标,必须先SET ENGINEBEHAVIOR 70,然后才好select * ...group by Name,最后又要SET ENGINEBEHAVIOR 90,啰哩啰嗦,还不好移植;
其二,group by Name除重的结果集,排序其实是随机的,我反复亲眼见证过了;且,即便order by ID,也根本得不到原始排序的结果!究其原因:是先除重,后排序;而在除重时,VFP可能随机挑中了一个排在后边的Name,而前边那一个Name,就被剔除了;如此得到的结果集,其实是乱序的。
其三,想用标准的SQL来实现,实在也是有点儿“洁癖”作祟。




[此贴子已经被作者于2025-7-4 23:15编辑过]

4 天前 14:28
快速回复:Select语句按记录的原始顺序除重,遇到个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030878 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved