做矩阵1)关于sql语句

本文记录了在使用Oracle数据库时,如何通过SQL语句解决选择唯一用户ID并按文件位置排序的问题。通过一个简单的回复,作者发现使用`GROUP BY`结合`MIN()`函数可以有效地实现需求。同时,讨论了`DISTINCT`和`ORDER BY`的使用限制,并提到了`TO_CHAR`和`TRUNC`函数在处理时间字段时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做个矩阵,其实就是个二维数组,关键是要从数据库里调些数据,sql语句不熟练,就边学边用,同步地记些笔记,方便查阅

关于distinct和order by 发了个帖子(第一次哦) 

首帖:

用的是oracle的数据库
目的是想选出唯一的userid(原有重复值),并且按照filepos排序(原filepos是1,2,3.。。不重复的序号)
问题:以下语句都不能满足要求
1)select distinct userid from bbsfile where rootid=371841(不重复,但是没按顺序排)
2)select distinct userid,filepos from bbsfile where rootid=371841 order by filepos(按顺序排列,但是有重复)
3)select distinct userid from bbsfile where rootid=371841 order by filepos(语法出错)
就是想让出现重复值的一列按照没有重复值得一列排序

 

有一个简单的回复解决了问题

select userid from bbsfile where rootid=371841 group by userid order by min(filepos);

思考的角度变一下就出结果了,这里关键是用到了min 这么简单的就去掉了重复。

分析:distinct 只能选出后面跟的一串字所构成的行,让每一行都不相同。

但是,order by 后面的东西又必须出现在distinct 后面 。所以出现了上述问题。或许还有别的好的解决办法,暂没想到。

 

考虑时间:由于时间包括日期和时间,如果仅是filetime=xx年月日 返回空,to_char很好用,可以将时间转换为特定格式。

trunc(filetime)='15-10月-07' and to_char(filetime,'hh24') between 18 and 20 group by bbsuserid order by min(filepos)";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值