一个表t,有个日期列d。需要写SQL,输出日期d。排序要求:d大于当前日期的在小于的之前,距离当前日期越进的在远的之前 。
2015-10-23 16:27
471 查看
今天同事出了个问题如下:
一个表t,有个日期列d。需要写SQL,输出日期d。排序要求:d大于当前日期的在小于的之前,距离当前日期越进的在远的之前 。
挺有意思,尝试写写。
现在日期一般都用long类型存储。这里做测试,为了方便测试数据用1-9代表日期,其中5为当前日期。
建表结构:
![](http://img.blog.csdn.net/20151023161013485)
现在想得到的数据顺序为 6、7、8、9、4、3、2 、1
这里先报一下最后大神的方法,再次膜拜:
![](http://img.blog.csdn.net/20151023161259194)
诸位大神看到这里就可以结束了。
下面是我自己的思路,用于记录,见笑。到最后自己也只得出了下面sql。
用当前值与最大值比较,得出排序的临时字段z
![](http://img.blog.csdn.net/20151023161555886)
尽管很low,但还是要把一步步走过来的轨迹记录下。
1、sql语句默认正序排列,这个方法不能实现。
![](http://img.blog.csdn.net/20151023161658426)
2、尝试增加临时变量用来记录顺序,还没想到怎么取合理的临时变量。
![](http://img.blog.csdn.net/20151023161717976)
3、将上一步的sql语句简化
![](http://img.blog.csdn.net/20151023161734359)
4、找到一个临时变量。对大于5(当前时间)的值,进行 最大值减去当前值 做临时变量。对小于5的值,进行 当前值减去最大值 做临时变量,合并后做临时变量倒序排列。
![](http://img.blog.csdn.net/20151023161813810)
或许有更好的方法。欢迎留言。
一个表t,有个日期列d。需要写SQL,输出日期d。排序要求:d大于当前日期的在小于的之前,距离当前日期越进的在远的之前 。
挺有意思,尝试写写。
现在日期一般都用long类型存储。这里做测试,为了方便测试数据用1-9代表日期,其中5为当前日期。
建表结构:
CREATE TABLE `t` ( `d` BIGINT(20) NULL DEFAULT NULL ) COLLATE='utf8_general_ci' ENGINE=InnoDB ;
insert into `t` (`d`) values (1),(2),(3),(4),(5),(6),(7),(8),(9);得到如下数据:
现在想得到的数据顺序为 6、7、8、9、4、3、2 、1
这里先报一下最后大神的方法,再次膜拜:
select d<5 as future, d from t order by future, abs(d-5)
诸位大神看到这里就可以结束了。
下面是我自己的思路,用于记录,见笑。到最后自己也只得出了下面sql。
用当前值与最大值比较,得出排序的临时字段z
SELECT a3.z,a3.d FROM ( ( SELECT t1.m-d z, d FROM t,(select max(d) m from t) t1 WHERE t.d > 5) UNION ALL ( SELECT d-t1.m z, d FROM t,(select max(d) m from t) t1 WHERE t.d < 5) ) a3 ORDER BY a3.z DESC
尽管很low,但还是要把一步步走过来的轨迹记录下。
1、sql语句默认正序排列,这个方法不能实现。
2、尝试增加临时变量用来记录顺序,还没想到怎么取合理的临时变量。
3、将上一步的sql语句简化
4、找到一个临时变量。对大于5(当前时间)的值,进行 最大值减去当前值 做临时变量。对小于5的值,进行 当前值减去最大值 做临时变量,合并后做临时变量倒序排列。
或许有更好的方法。欢迎留言。
相关文章推荐
- 基于Oracle的EntityFramework的WEBAPI2的实现(四)——自动生成在线帮助文档
- linux问题-Redis的安装以及常用命令
- Redis KVStore 在阿里云环境下的性能报告及问题
- JBoss7.1配置Oracle11g数据源,详细图解
- oracle存储过程语法
- Oracle中TO_DATE格式
- Oracle 自动同步数据脚本
- 使用wget下载Oracle的JDK
- wordpress操作数据库
- oracle——pl/sql 查询中文乱码
- mysql根据身份证信息来获取用户属性信息
- mysql去除内容中的换行和回车
- sqlserver获取其中所有表的名称
- PL/SQL连接oracle
- oracle——存储过程分页
- 关系型数据库与非关系型数据库
- oracle 字母数字混合排序
- mysql+keepalived主从切换脚本 转
- MongoDB 学习笔记一 CentOS下安装、使用、性能监测
- 像查看本地Oracle数据一样查看远程Oracle数据-----Oracle database link创建和使用