SQL 选取每个分组的某一条数据
2017-05-10 18:26
302 查看
背景:有时候我们需要对多条数据按照某个字段分组,然后选取某组中的某一个记录。
例如-
同一运单 有多条装车记录时 取最大时间的记录
sql 实现
1.Sqlserver:
SELECT
waybill_id, -- 运单号
sigin_time, -- 签到时间
unload_time, -- 卸车时间
loading_time, -- 装车时间
send_time, -- 发车时间
create_time -- 记录创建时间
FROM (SELECT waybill_id,
sigin_time,
unload_time,
loading_time,
send_time,
create_time,row_number() OVER (PARTITION BY waybill_id
ORDER BY create_time DESC) row_no
FROM tms_tms_loading_details a ) b
WHERE row_no=1
2.Mysql:
SELECT
waybill_id, -- 运单号
sigin_time, -- 签到时间
unload_time, -- 卸车时间
loading_time, -- 装车时间
send_time, -- 发车时间
max(create_time) -- 记录创建时间
FROM tms_tms_loading_details
group by waybill_id
例如-
同一运单 有多条装车记录时 取最大时间的记录
sql 实现
1.Sqlserver:
SELECT
waybill_id, -- 运单号
sigin_time, -- 签到时间
unload_time, -- 卸车时间
loading_time, -- 装车时间
send_time, -- 发车时间
create_time -- 记录创建时间
FROM (SELECT waybill_id,
sigin_time,
unload_time,
loading_time,
send_time,
create_time,row_number() OVER (PARTITION BY waybill_id
ORDER BY create_time DESC) row_no
FROM tms_tms_loading_details a ) b
WHERE row_no=1
2.Mysql:
SELECT
waybill_id, -- 运单号
sigin_time, -- 签到时间
unload_time, -- 卸车时间
loading_time, -- 装车时间
send_time, -- 发车时间
max(create_time) -- 记录创建时间
FROM tms_tms_loading_details
group by waybill_id
相关文章推荐
- yii 使用原生sql 查询 以某一字段分组 每个字段取出最新的一条数据
- 【SQL精彩语句】按某一字段分组取最大(小)值所在行的数据
- SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
- SQL数据分组后取最大值或者取前几个值(按照某一列排序)
- sqlserver group by 分组后,取每个分组的第一条数据
- SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
- sql取每个分组的第一行数据
- SQL 分组数据后 取每个分组的第一条数据(SQL Server)
- 【SQL精彩语句】按某一字段分组取最大(小)值所在行的数据
- SQL数据分组后取最大值或者取前几个值(按照某一列排序)
- sql取每个分组的第一行数据
- SQL数据分组后取最大值或者取前几个值(依照某一列排序)
- SQL高级语句-SELECT INTO 从一个表中选取数据,然后把数据插入另一个表中
- 【SQL】分组数据,过滤分组-group by , having
- 从Mysql某一表中随机读取n条数据的SQL查询语句
- SQL 分组统计 之 同字段不同数据分别统计
- 【MySQL】按某一字段分组取最大(小)值所在行的数据
- SQL---DML---分组数据GROUP BY, HAVING子句总结
- SQL SERVER 取出 一张表中的每个分组中 的第一条数据 ,第一条数据是按照某种排序规则进行排序取的第一条
- SQL 数据分组