sql分組第一條
1. 我想取每個分組下的第一條數據,如下圖:我想取1,4的數據,我該如何寫sql呢
SQLSERVER語句如下:
with nyr as (
select NYR,QYZX_DM,FXSP_XH,SPBM_DLJ,WBSP_GG,JGLX,JZJG,MAX(SJGX_SJ),
ROW_NUMBER() over (partition by nyr order by nyr) as 'rowno'
from WD_O_T_IC_SPSJ_FX
where rowno=1
group by NYR,QYZX_DM,FXSP_XH,SPBM_DLJ,WBSP_GG,JGLX,JZJG
order by NYR,QYZX_DM,FXSP_XH,SPBM_DLJ,WBSP_GG,JGLX,MAX(SJGX_SJ) desc
)
select *
from nyr
where rowno = 1
因我沒有你的數據,沒有測試,不好意思。
如有問題,請追問一下。
2. 如何用SQL SERVER取分組數據第一條
根據table1_id進行分組所得結果:
select * from (select a.id as a_id,a.name,a.time,a.content,b.id as b_id,b.user from table1 a inner join table2 b on a.id = b.table1_ID) new_tbl where b_id in (select min(id) from table2 group by table1_ID)
(2)sql分組第一條擴展閱讀:
注意事項
在SQL Server資料庫中,使用top關鍵字:SELECT TOP number|percent column_name(s) FROM table_name
在MySQL資料庫中,使用LIMIT關鍵字:SELECT column_name(s) FROM table_name LIMIT number
例子:SELECT * FROM Persons LIMIT 1
select bookName from book where price > 20 limit 1;
limit 1;
or
limit 0,1;
在Oracle資料庫中,使用ROWNUM關鍵字:
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
例子:SELECT * FROM Persons WHERE ROWNUM <= 1
3. SQL 取出每個分組的第一條記錄,同時還顯示每個分組某個欄位的總和
--如果臨時表存在,刪除
if exists (select * from tempdb.dbo.sysobjects where id = object_id('tempdb.dbo.[##tableA]'))
drop table [dbo].[##tableA]
--以第一條記錄創建臨時表
--註:根據你的要求,追加了一個用來確定組內記錄序號的欄位row_order,
-- 因為如果沒有這個欄位,沒有辦法實現取得你說的那樣的第1條記錄的。
select A='a',B=1,C='w',D='b',row_order=1 into ##tableA
--將其餘5個記錄寫入臨時表
insert into ##tableA
select 'a', 2, 'x', 'y',row_order=2 union
select 'a', 3, 'z', 't',row_order=3 union
select 'b', 2, 'g', 't',row_order=1 union
select 'b', 1, 'm', 'h',row_order=2 union
select 'b', 5, 'u', 'q',row_order=3
go
--用公共表達式取得即將要輸出的結果集
with ABCD as (
select A,B,C,D,row_number() over (partition by A order by row_order ) as 'rowid',
sum(B) over (partition by A) as 'SUMB'
from ##tableA)
--從公式表達式中取得要求的結果
select A,B,C,D,SUMB
from ABCD
where rowid = 1
--刪除臨時表
if exists (select * from tempdb.dbo.sysobjects where id = object_id('tempdb.dbo.[##tableA]'))
drop table [dbo].[##tableA]
/*
A B C D SUM(B)
a 1 w b 7 註:根據你的數據,應該是6
b 2 g t 8
*/
------------------------------------------------------------------
輸出的結果:
A B C D SUMB
---- ----------- ---- ---- -----------
a 1 w b 6
b 2 g t 8
(2 行受影響)
4. 分組選出第一的sql語句
SELECT top 1 * from Candidate group by [group]
SELECT top 1 * from (select * from Candidate group by [group] order by xxx )
保留字加方括弧
5. sql 獲取分組第一行數據
是oracle資料庫是這樣寫:
select namec,medicinemodel,outlookc,memo2 from (select namec,medicinemodel,outlookc,memo2 from 表名 group by namec,medicinemodel,outlookc,memo2 order by BidPrice) where rownum = 1;
這樣就查出第一行的數據
6. sql按欄位分組,並且找出每組的第一條數據
不知道你什
么資料庫,給出sqlserver和oracle的
select星期,字母
from
(selectrank()over(partitionby星期orderby字母desc)id,*
from表)t1
whereid=1
或者
select星期,max(字母)
from表
groupby星期
7. sql分組求第一條數據的問題是用什麼方法呢
withAas(SELECTdepartment.dept_name,empl_no,empl_name,pa101_03,
pa012.pa012_02,pa101_06,pa101_07_dd,pa101_01_dd,pa101_02,pa232.pa23203as'合同開始時間',pa232.pa23204as'合同結束時間'FROMpa101
INNERJOINdepartmentON(pa101.pa101_08=department.dept_cd)
INNERJOINpa012ON(pa101.pa101_10=pa012.pa012_01)
LEFTJOINPA013ON(PA101.PA101_29=PA013.PA013_01)
LEFTJOINPA011ON(PA011.PA011_01=PA101.PA101_09)
leftjoinpa232onpa232.pa23201=pa101.empl_no)
select*
fromAB1
where合同開始時間=(selectMAX(合同開始時間)fromAB2whereB1.empl_no=B2.empl_no)
8. 求一句Sql語句,選出分組中的第一個數據或某一條數據
同意 樓上的
也就是說,你把想篩選的 欄位都寫在 select distinct 後面 就可以了.
9. sql資料庫怎麼實現分組並取每組的前1條語句,按日期排序
select * from
(
select row_number() over(partition by '分組' order by '日期') as rownum -- 排序並分組
, * -- 所需顯示的欄位
from 表
) as T
where T.rownum = 1
對每組的數據按日期排序並加上行號
取出時只取行號為1,也就是第一條數據。
10. SQL 中如何根據只根據第一個欄位分組
使用分析函數row_number() over (partiion by ... order by ...)來進行分組編號,然後取分組標號值為1的記錄即可。目前主流的資料庫都有支持分析函數,很好用。
其中,partition by 是指定按哪些欄位進行分組,這些欄位值相同的記錄將在一起編號;order by則是指定在同一組中進行編號時是按照怎樣的順序。
示例(SQL Server 2005或以上適用):
123456
select s.* from ( select *, row_number() over (partition by [手機號] order by [店鋪]) as group_idx from table_name) swhere s.group_idx = 1