被问这个问题的时候我的第一想法居然是用order by。。。。唉,好好的
max
放着不用。。。
sql示例:获取文件上传记录表中,每个用户产生的最新一条记录:
select * from file_record as a inner join (
select file_author,max(file_ctime) as file_ctime from file_record group by file_author) as b
on a.file_author=b.file_author
and a.file_ctime=b.file_ctime
如上,通过使用max、group by、inner join 即可获取到每个用户的最新一条数据记录;如果只是需要每个人的最新操作时间,只需要用到b的内容就可以了。
被问这个问题的时候我的第一想法居然是用order by。。。。唉,好好的 max 放着不用。。。sql示例:获取文件上传记录表中,每个用户产生的最新一条记录:select * from file_record as a inner join (select file_author,max(file_ctime) as file_ctime from file_record group by file_author) as bon a.file_author=b.file_authoran..
Mysql
取分组后的每组第
一条
数据
gruop by 分组后 进行 order by
mysql
会按照 先分组后排序的形式进行输出 并不能做到每组中的第
一条
数据
取出。
我的思路是 : 先将要查询的
数据
表转换成已经排序的临时表 在进行 分组操作 。 因为在
mysql
分组是将第一个出现的
数据
进行展示出。
MySQL
会创建临时表的几种情况:
1、UNION查询;
2、用到TEMPTABLE算法或者是UNION查询中的视图;
3、ORDER BY和GROUP BY的子句不一样时;
4、表连接中,ORDER BY的列不是驱动表中的;(指定了联接条件时,满足查询条件的
记录
行数少的表为[驱动表],未指定联接
避免使用*
2、表OrderItems含有非空的列prod_id代表商品id,包含了所有已订购的商品(有些已被订购多次);编写
SQL
语句,检索并列出所有已订购商品(prod_id)的去重后的清单。
select distinct prod_id from OrderItems ;
distinct去重的使用,在列的前面使用
3、现在有Custom
一、单表查询
1. 查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、
客户
ID和雇员ID等字段的值
SELECT 订购日期,订单ID,
客户
ID,雇员ID FROM `订单`
WHERE 订购日期 BETWEEN '1996-07-01' AND '1996-07-15'
2.查询供应商的ID、公司名称、地区、城市和电话字段的值。条件是“地区等于华北”并且“联系人头衔等于销售代表”
SELECT 供应商ID,公司名称,地区,城市,电话 FROM `供应商`
SELECT * from patient_state a JOIN (select max(state_id) as state_id from patient_state group by patid) b ON b.state_id = a.state_id ORDER BY a.patid asc;
city列里面只有5个城市
使用ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) 先进行分组 注:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
sql
语句为:
select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City,ROW_NUMBER() over(partition by City order by EmployeeID
流水
记录
表中,一个
用户
通常会生成许多
记录
如果只要
最新
一条
,可以借助max来
获取
.
如文件上传
记录
表中,
获取
文件上传
记录
表中,
每个
用户
产生的
最新
一条
记录
:
select * from file_record as a inner join (
select file_author,max(file_ctime) as file_ctime from file_record group by file_author) as b
on a.file_author=b.file_author
and a...