最近,在做一个项目的时候,发现得出的数据于预料的相差很多,仔细的研究了一下,发现问题出在 distinct语句和groupy by,order by
首先,distinct语句,获得非重复的(唯一)行记.
grouy by是分组,order by 是排序。
直接看我的例子。
假定我有一个表f_job,有字段:
select job_id, com_id,job_time from f_job order by job_time desc limit 10; \T e:\web\web\PHP\fhr\tee.txt
+--------+--------+---------------------+
job_id com_id job_time
+--------+--------+---------------------+
5060 2205 2006-09-29 16:30:11
4707 19084 2006-09-29 16:27:55
4708 19084 2006-09-29 16:27:55
4709 19084 2006-09-29 16:27:55
4710 19084 2006-09-29 16:27:55
4711 19084 2006-09-29 16:27:55
4859 19084 2006-09-29 16:27:55
4918 19084 2006-09-29 16:27:55
5059 2205 2006-09-29 16:27:22
4078 2715 2006-09-29 16:18:36
+--------+--------+---------------------+
10 rows in set (0.03 sec)
还有其他字段,不可能影响结果.此处不列出。
job_id是primary key。 com_id是外键,我需要按照时间来排序。所以必须使用order by!
你看到了com_id在得出的结果中不唯一,对,我需要的结果就是提取com_id唯一的最近10条com_id的记录,而已。
我就以以前的MSSQL的经验写如下的语句执行:
mysql> select distinct( com_id) from f_job order by job_time desc limit 10; \T e:\web\web\php\fhr\tee.txt
+--------+
com_id
+--------+
19084
2197
19917
19580
19520
19664
19397
19900
1176
19449
+--------+