SQL group by的困惑
来源:互联网 发布:linux cdn 编辑:程序博客网 时间:2024/04/29 10:02
今天为写一条SQL困扰了很久
首先先贴两条sql,大家看看有啥区别
- select * from all_txt Awhere id=(SELECT idfrom all_txt
- select * from all_txt Awhere id=(SELECT idfrom all_txt
- where A.key_value = key_valueORDERBY release_timeDESC limit 1);
- where A.key_value = key_valueORDER BY release_timeDESC limit 1);
- select * from (select *,max(release_time)as timea
- select * from (select *,max(release_time)as timea
- from all_txt groupby key_valueorderby release_timedesc) aorderby timeadesc;
- from all_txt groupby key_value orderby release_time desc) aorder by timeadesc;
然后说明下表的重要字段为三个id,key_value,release_time
作用是取每个相同key_value中release_time最新的数据
所有的数据为
- id key_value release_time
- 1 001 2007-11-01
- 2 001 2007-11-02
- 3 001 2007-11-03
- 4 002 2007-11-04
- 5 002 2007-11-05
- 6 003 2007-11-06
- 7 004 2007-11-07
- 8 004 2007-11-08
- 9 005 2007-11-09
- 10 005 2007-11-10
- id key_value release_time
- 1 001 2007-11-01
- 2 001 2007-11-02
- 3 001 2007-11-03
- 4 002 2007-11-04
- 5 002 2007-11-05
- 6 003 2007-11-06
- 7 004 2007-11-07
- 8 004 2007-11-08
- 9 005 2007-11-09
- 10 005 2007-11-10
现在要的结果为
- id key_value release_time
- 3 001 2007-11-03
- 5 002 2007-11-05
- 6 003 2007-11-06
- 8 004 2007-11-08
- 10 005 2007-11-10
- id key_value release_time
- 3 001 2007-11-03
- 5 002 2007-11-05
- 6 003 2007-11-06
- 8 004 2007-11-08
- 10 005 2007-11-10
针对这些数据,显示貌似都一样
但仔细研究下来就会发现
第二句 返回的会是
- id key_value timea release_time
- 3 001 2007-11-03 2007-11-01
- 5 002 2007-11-05 2007-11-04
- 6 003 2007-11-06 2007-11-06
- 8 004 2007-11-08 2007-11-07
- 10 005 2007-11-10 2007-11-09
- id key_value timea release_time
- 3 001 2007-11-03 2007-11-01
- 5 002 2007-11-05 2007-11-04
- 6 003 2007-11-06 2007-11-06
- 8 004 2007-11-08 2007-11-07
- 10 005 2007-11-10 2007-11-09
用max求出来的数据timea是没错,是上面的release_time,但真实的release_time却是不一样的,那证明取的数据不是最新的那条的,而是给我感觉取的是物理位置上的第一条,这样的话如果你还需要这张表的其他字段就会有问题。
说了半天有人会说,那你就用第一种吧,执行下你就会发现,性能太差了,而第二种就很快,本以为能用第二种的,哎~~~~可能是对group by的本质还是了解不是很透彻
大家有啥更好的优化意见或方法,可以给我留言或加入qq群:47833489 讨论
0 0
- SQL group by的困惑
- SQL group by的困惑
- sql的group by
- SQL的 Group By
- SQL的GROUP by
- Sql group by 的使用方法
- SQL GROUP BY的用法
- SQL GROUP BY的用法
- sql,group by的使用
- SQL Group by的使用
- SQL的GROUP BY详解
- 关于having,group by 的Sql 语句
- sql中group by的应用
- SQL group by语句的使用
- 类似SQL 的Group by功能
- sql group by 与 having的用法
- 关于group by 的一个SQL题目
- sql group by的巧用
- 数字图像处理--空间变换
- 触摸屏驱动的改写
- AutoLayout
- 安装制作不用愁—Wise installation入门教程
- C++ 如何从string中删除一个字符?
- SQL group by的困惑
- Binary Tree Maximum Path Sum
- 链表学习笔记
- 三大主流工作流引擎技术分析与市场预测
- hdu 4662 MU Puzzle
- 两个程序员的泰国普吉岛之行
- 初识HTML
- struts2 url重写
- TCP连接的建立与终止