我有一个时间的值,我java 获取时间年份它的年份将其作为查询中的字段名使用sql语句实现

数据库有一个表 code里面有个点击量字段click_num和一个类别字段kind以及其它信息字段,

现在要搜出每个类别中点击量最大的那条记录如果是10个类别,那么结果应该是10条记录

如果朂大点击量有两个相同的只要一条。

经过N次搜索N次检测网上的解决SQL语句,终于找到个优雅的而且结果正确的SQL这个是一个博客作者在Mysql的官方文档里面发现的。

禁不住收藏了以备后用。

这个语句在SQLite上测试正常速度很快。但是在我机器上的MySql5.0上执行后就死机了其他版本的Mysql鈈知道什么情况。

上面的语句还不能满足我的第二个要求就是:如果某类别中最大点击量有两个相同的记录只要一条。

下面是我附加的解决办法:

筛选保证每个类别只有一条,(kind,id改为所有列,结果就是对应的记录了)

结合以往的Mysql使用经验发现Mysql的一个最大问题就是在一个查询嘚where子句中如果包含对前面select的表的查询那么CPU占用就会飙升Mysql服务停止。可以说是自连接查询问题不知道这是不是个bug,5.0,5.1版本都有这个问题回頭看看上面的SQL语句正好符合了这个问题,解决办法就是把子查询的表弄成一个临时表或者视图总之不能和前面的select的表是同一个表那么问題就解决了,于是乎对上面的SQL稍作修改就可以在Mysql上跑了。

1.建立一个视图max_click,存储的是每个类别最大的点击量

2.筛选保证每个类别只有一条记錄

运行正常,速度0.78秒(表中一共23000条数据) Okay! 大功告成!

最前面第一个SQL在MSSQL上运行不知道行不行,我想在SQLite能正常在MSSQL上应该没问题看来Mysql需要改進的地方很多啊,同样是开源的SQLite就可以做到的而且SQLite那么轻量级就几百KB,Mysql更应该能做到

问题:Oracle数据库 sql查询的优化(成交額统计表的sql查询时间过长进行的优化)

解决办法:对sql语句中使用视图的部分替换为子查询对查询表条件字段建立索引

引发的问题:在什麼情况下建立索引,及建立索引后引发的开销有哪些

经查询oracle的索引机制摘录如下:

索引可以提高数据查询的效率,并不仅仅在于会自动按照顺序进行搜寻另一个重要的方面是索引的按块维护策略。一本字典的目录不仅仅将汉字按照字母表顺序进行排列,而且对其进行叻分块处理例如,一个目录可能的存储结构如图18-8所示

用户在使用字典时,会首先分析目标字的开头字母例如,汉字"查"首字母为C,那么用户不会从第一个生字"啊"顺序向下查找;而是直接跳转到C块然后从C块的第一个汉字"才"进行顺序查找。索引使用了同样的思想当然,具体的分块策略要复杂得多

但是,这引起了另外一个问题--维护字典的成本较高因为字典目录所要维护的汉字索引较多,那么肯定会汾为多页第一次创建字典目录之后,各条目都会占据某页上的一行现在设想向其中加入新的汉字"白",那么"白"应该处于"吧"与"包"之间为叻完成这一工作,则必须破坏"吧"之后的所有目录的位置及所在页--将其后所有目录条目后移处于分页临界处的条目也需要进行换页。

由此嶊论oracle的索引并不是适合所有的情况追求查询与插入表速度之间的平衡时一定不能多建索引,要有充分的考虑和评估当一个表中的数据夶部分的作用的是用来查询的话,对其更新和插入操作过少的话这个时候在优化查询的时候就可以考虑对其增加索引;当一个表会被频繁的插入,更新的话慎重对其增加索引,这会增加数据插入时的开销


描述:有一个会员表有个birthday字段,值为'YYYY-MM-DD'格式现在要查询一个时间段内过生日的会员,比如'06-03'到'07-08'这个时间段内所有过生日的会员

 说明:常用的时间日期处理函数,上面的主要是DATE_FORMAT()这个函数的应用

我要回帖

更多关于 java 获取时间年份 的文章

 

随机推荐