sql取每个分组的第一行数据
2011-11-02 23:36
330 查看
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');
--插入数据 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取每个分组的第一行数据
- SQL 分组数据后 取每个分组的第一条数据(SQL Server)
- SQL 选取每个分组的某一条数据
- sqlserver group by 分组后,取每个分组的第一条数据
- yii 使用原生sql 查询 以某一字段分组 每个字段取出最新的一条数据
- SQL分组处理气象数据及注意事项
- 输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
- sql数据分组重复的取一条
- mysql 按月分组累计统计数据,纯sql实现的一个方法
- SQL语句分组获取记录的第一条数据
- sql取出每个分组的前几条
- 05. 取SQL分组中的某几行数据
- SQL 必知必会·笔记<8>分组数据
- SQL数据排序与分组
- sql分组(orderBy、GroupBy)获取每组前一(几)条数据
- sql 实现分页+分组并取出分组内的前n条数据
- sql 语句取分组后的条件数据
- Sql分组后取每个组的前几条记录
- [MSSQL]SQL疑难杂症实战记录-巧妙利用PARTITION分组排名递增特性解决合并连续相同数据行
- sql 分组求数量,并取最新一条数据