Re: [SQL ] 在Group by中取得首筆資料
※ 引述《SangoGO (隱世的外來人Lv.1)》之銘言:
: 資料庫名稱:MS SQL
: 資料庫版本:2012
: 內容/問題描述:
: 各位先進好
: 自己在公司專案的開發上碰到了查詢上的難題
: 如下圖範例所示
: http://i.imgur.com/mL6ulEi.png
: 左邊是原始Insert的資料
: 中間是依照TYPE與DATE排序的結果
: 右邊為預期產出
: 用Group by能直接算出各TYPE的AMT和
: 但旁邊的DATE與VALUE就缺乏有效的取得方法
: 有試過用子查詢去抓
: 但因為實際筆數過大(可能有100,000)而速度緩慢
: 又或者讓結果去找原表,每筆0.1秒的話,6000筆就要10分鐘了
: 是否有更好解決的方法呢,求各位先進開示了
: -----
: Sent from JPTT on my Sony E6853.
用2個查詢可以做,
若有大大知道更簡潔的語法也請分享一下~
create table table_A
(
type1 varchar(10),
amt integer,
date1 date,
extend_value varchar(10)
);
insert into table_A (type1,amt,date1,extend_value)
values
('A' , 600 , '20170703' , '07001-2') ,
('A' , 700 , '20170701' , '07001-8') ,
('B' , 500 , '20170704' , '07001-21') ,
('B' , 1100, '20170705' , '07001-17') ,
('C' , 700 , '20170713' , '07001-9') ,
('C' , 800 , '20170714' , '07001-6') ,
('D' , 600 , '20170706' , '07001-13') ,
('D' , 500 , '20170707' , '07001-18')
;
select b.type1,a.amt,b.date1,b.extend_value from
(
select type1,amt,date1,extend_value,
ROW_NUMBER() OVER (partition by type1 ORDER BY type1,date1) N
from table_A
) b
left join
(select type1,sum(amt) as amt
from table_A
group by type1
) a
on a.type1=b.type1
where b.N=1
output
type1 amt date1 extend_value
A 1300 2017-07-01 07001-8
B 1600 2017-07-04 07001-21
C 1500 2017-07-13 07001-9
D 1100 2017-07-06 07001-13
手機編輯有點難弄,若格式跑掉晚上再整理文章,
後來想到應該不用row number也可以做
select b.type1,a.amt,b.date1,b.extend_value
from table_A b
inner join
(
select type1,sum(amt) as amt ,MIN(DATE1) date1
from table_A
group by type1
) a
on a.type1=b.type1
AND a.date1=b.date1
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.147.29.46
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1500903422.A.373.html
※ 編輯: criky (27.147.29.46), 07/24/2017 21:40:20
※ 編輯: criky (180.217.130.233), 07/25/2017 09:29:03
※ 編輯: criky (180.217.130.233), 07/25/2017 09:30:28
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章