1. 程式人生 > >Mysql和Oracl 分組取每組前N條記錄

Mysql和Oracl 分組取每組前N條記錄

MySQL取每組的前N條記錄:使用自連線的方式


一、對分組的記錄取前N條記錄:例子:取前 2條最大(小)的記錄

1234567891011121314151617181.用子查詢:SELECT FROM right2 a  WHERE 2>(SELECT COUNT(*) FROM right2 b WHERE b.id=a.id AND b.account>a.account)ORDER BY a.id,a.account DESC2.用exists半連線:SELECT FROM right2 a  WHERE EXISTS(SELECT COUNT(*) FROM right2 b 
WHERE b.id=a.id AND a.account<b.account HAVING COUNT(*)<2)ORDER BY a.id,a.account DESC同理可以取組內最小的N條記錄:SELECT FROM right2 a  WHERE 2>(SELECT COUNT(*) FROM right2 b WHERE b.id=a.id AND b.account<a.account)ORDER BY a.id,a.account DESC用exists:SELECT FROM right2 a  WHERE EXISTS(SELECT COUNT
(*) FROM right2 b WHERE b.id=a.id AND a.account>b.account HAVING COUNT(*)<2)ORDER BY a.id,a.account DESCSQLServer支援top-N:select a.* from tb a where val = (select top 3 val from tb where name = a.nameorder by a.name

如果取每組的最大(小)一條記錄我常用:

1select id,val from t b inner join(select from t a where  order
 by val desc) a  on a.id=b.id group by a.id order  by id;

二.例項:取每組最大的前 N條          

12345678910

相關推薦

MysqlOracl 分組N記錄

MySQL取每組的前N條記錄:使用自連線的方式一、對分組的記錄取前N條記錄:例子:取前 2條最大(小)的記錄1234567891011121314151617181.用子查詢:SELECT * FROM right2 a  WHERE 2>(SELECT COUNT(*

mysql分組記錄(排名) 附group by與order by的研究

select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name--方法2:select a.* from tb a where not exists(select 1 from tb 

mysql分組記錄

1、表SQL: DROP TABLE IF EXISTS `ho_archives`; CREATE TABLE `ho_archives` (   `id` mediumint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',

分組查詢n記錄例項

假設有這樣一張運動員比賽成績表 tb_score 現在要求查詢出每個國家的前三名的成績記錄,查詢語句可以這樣寫: 1、 select t3.id,t3.country,t3.score fro

用postgresql特性簡化group by 後n記錄的方法

需求: 求一段時間內各生產線前3名壞機的原因及壞機數. step 1, 從將原始資料中抽取品質資料放於t96臨時表 create temp table t96 on commit drop as

Mysql獲取N記錄(開窗函式)

由於專案需求,我需要把查詢出來的資料進行分組,並且只需要每組前三條記錄,後來瞭解到MySQL實現開窗函式的方法,用了之後發現是可以,但今天發現這個方法在Navicat Premium軟體中執行第一次所查詢出來的資料不符合,執行第二次才是符合要求,具體原因有空再瞭

Mysql獲取N記錄

Select基礎知識 我們在實現select語句的時候,通用的sql格式如下: select *columns* from *tables* where *predicae1* group by *columns* having

mysqlN

mysql desc span pre esc select then rom order SELECT * from ( select case when t.province=@prov then @rownum:=@rownum+1 else @rownum

(oracle/mysql)查詢出分組查詢的第一資料

一下是oracle/mysql分組查詢查出每組資料的第一條資料: 表資料: create table tb_name (   column1 int,   column2 varchar,   column3 int,   column4 date ) 查出時間上最新

sql查詢記錄

首先建立測試資料 CREATE TABLE `t2` ( `id` int(11) NOT NULL, `gid` char(1) DEFAULT NULL, `col1` int(11) DEFAULT NULL, `col2` int(11) DEFAU

MySQLN記錄

  MySQL 分組後取每組前N條資料 與oracle的 rownumber() over(partition by xxx  order by xxx )語句類似,即:對錶分組後排序 CREATE TABLE `mygoods` ( `goods

mysql使用GROUP BY分組實現N記錄的方法

cls class ges rom 當前 分組 實現 一個 images MySQL中GROUP BY分組取前N條記錄實現 mysql分組,取記錄 GROUP BY之後如何取每組的前兩位下面我來講述mysql中GROUP BY分組取前N條記錄實現方法。 這是測試表(也

mysql學生成績排名,分組 N 記錄

score表: CREATE TABLE `score` ( `student_id` int(10) DEFAULT NULL, `class_id` int(10) DEFAULT NULL, `score` int(5) DEFAULT

Mysql分組統計、排序、N記錄解決方案

今日根據專案需求,需要在mysql中解決記錄的分組統計、排序,並抽取前10條記錄的功能。現已解決,解決方案如下: 1)表結構 <span style="font-size:18px;">CREATE TABLE `policy_keywords_rel` (

sqlite 分組後獲取的第一記錄

有表如下 CREATE TABLE test ( id INTEGER PRIMARY KEY ,groupid INTEGER DEFAULT 0 ,t INTEGER DEFAULT 0 ,x INTEGER DEFAULT 0 ,y INTEGER DEFAULT 0

MYSQL 查詢N記錄某個欄位的

假設有個課程表course,其中有個欄位Ccredit,現在想查詢這個欄位前N條記錄的和,那麼這個語句該怎麼寫? 可能首先想到的就是:select sum(Ccredit) from course limit N; 可是經過試驗卻發現查詢出來的是這個欄位所有記錄的和,而不是前

Linq分組及排序,N記錄

Linq多欄位分組排序並取前N條記錄時,一定要先分組再排序,不然取到的記錄是不規則的 程式碼示例【按HotWord分組,並取sorNum倒序,取前15條記錄】 [Route("api/

sql語句分組查詢排序後取出n記錄

1.sql語句分組排序後取出前n條記錄 (SELECT * FROM ( SELECT "row_number" () OVER ( PARTITION BY mmsi ORDER BY orginal_in_draught DESC ) A

mysql查詢某屬性下所有值的N記錄

例如, 姓名 科目 成績 王 數學 100 王 語文 99 王 英語 98 王 生物 97 王 政治 96 王 物理 95 王 化學 94 王 體育 93

從排序後的結果集中刪除 n記錄

not null ima -- date com alt delet lec log 端午有人休息,有人忙 操作前數據: --從排序後的結果集中刪除 前n條記錄delete from emp where empno in (select empno