sqlserver group by 分组后,取每个分组的第一条数据
2014-02-10 09:51
579 查看
编辑
1 --建立测试环境 CREATE TABLE table1(a VARCHAR(10),b VARCHAR(10),c VARCHAR(10));
--插入数据 INSERT INTO table1 VALUES('2004','12','storea');
INSERT INTO table1 VALUES('2005','07','storea');
INSERT INTO table1 VALUES('2004','11','storeb');
INSERT INTO table1 VALUES('2005','06','storeb'); COMMIT;
2 取分组记录的第一条
解法一
SELECT a.* FROM table1 a INNER JOIN ( SELECT MAX(a + b)TIME FROM table1 GROUP BY c ) b ON a.a + a.b = b.TIME
解法二
SELECT * FROM scott.table1 a WHERE NOT EXISTS (SELECT 1 FROM scott.table1 b WHERE a.a=b.a AND TO_NUMBER(a.b)<TO_NUMBER(b.b));
解法三
SELECT * FROM (SELECT t.*, RANK() OVER (PARTITION BY t.a ORDER BY t.b DESC) AS drank FROM table1 t) a WHERE drank=1
引申
SELECT t.*,SUM(b) OVER (PARTITION BY t.a) AS aaa, SUM(b) OVER () AS bbb FROM table1 t ORDER BY t.a,t.b
------
SELECT d.department_id , e.last_name, e.salary, RANK() OVER (PARTITION BY e.department_id ORDER BY e.salary) AS drank FROM employees e, departments d WHERE e.department_id = d.department_id AND d.department_id IN ('60', '90');
1 --建立测试环境 CREATE TABLE table1(a VARCHAR(10),b VARCHAR(10),c VARCHAR(10));
--插入数据 INSERT INTO table1 VALUES('2004','12','storea');
INSERT INTO table1 VALUES('2005','07','storea');
INSERT INTO table1 VALUES('2004','11','storeb');
INSERT INTO table1 VALUES('2005','06','storeb'); COMMIT;
2 取分组记录的第一条
解法一
SELECT a.* FROM table1 a INNER JOIN ( SELECT MAX(a + b)TIME FROM table1 GROUP BY c ) b ON a.a + a.b = b.TIME
解法二
SELECT * FROM scott.table1 a WHERE NOT EXISTS (SELECT 1 FROM scott.table1 b WHERE a.a=b.a AND TO_NUMBER(a.b)<TO_NUMBER(b.b));
解法三
SELECT * FROM (SELECT t.*, RANK() OVER (PARTITION BY t.a ORDER BY t.b DESC) AS drank FROM table1 t) a WHERE drank=1
引申
SELECT t.*,SUM(b) OVER (PARTITION BY t.a) AS aaa, SUM(b) OVER () AS bbb FROM table1 t ORDER BY t.a,t.b
------
SELECT d.department_id , e.last_name, e.salary, RANK() OVER (PARTITION BY e.department_id ORDER BY e.salary) AS drank FROM employees e, departments d WHERE e.department_id = d.department_id AND d.department_id IN ('60', '90');
相关文章推荐
- sql server group by 分组带sum avg求和需要注意的一点
- sql获取分组后的第二条数据 group by limit
- SQL 分组数据后 取每个分组的第一条数据(SQL Server)
- Sql group by 分组取时间最新的一条数据
- 通过GROUP BY grouping sets提升数据分组统计效率
- SQL Group By分组的使用
- yii 使用原生sql 查询 以某一字段分组 每个字段取出最新的一条数据
- Sql server Group by 统计数量 order by时间
- 《Microsoft SQL Server 2008 Analysis Services Step by Step》学习笔记十二:从Analysis Services检索数据
- SQL SERVER 取出 一张表中的每个分组中 的第一条数据 ,第一条数据是按照某种排序规则进行排序取的第一条
- SQL语句分组获取记录的第一条数据的方法
- sql数据分组,过滤分组,group,having,排序
- SQL语句分组获取记录的第一条数据的方法
- SQL Server BI Step by Step --- 使用SSIS进行简单的数据导入导出
- 【sql进阶】查询每天、每个设备的第一条数据
- SQL GROUP BY(分组)
- SQL Server BI Step by Step SSIS 4 ---合并数据3
- 《Microsoft SQL Server 2008 Analysis Services Step by Step》学习笔记十二:从Analysis Services检索数据
- SQL分组获取记录的第一条数据——PARTITION BY
- sql group by 分组选择保留哪一行