Re: [SQL ] 怎麼求最大值/最小值?
想像錯誤,我JOIN不出來…囧rz
DECLARE @T TABLE(PARTID CHAR(5),DMC INT, DMLC INT, OC INT, VDATE CHAR(12))
INSERT @T VALUES('A-120',12,100,10,'20080101')
INSERT @T VALUES('A-120',10,100,10,'20080228')
INSERT @T VALUES('A-120',12,150,10,'20080501')
INSERT @T VALUES('A-120',10,100,18,'20080602')
INSERT @T VALUES('B-002',3,4,8,'20080202')
INSERT @T VALUES('B-002',3,5,5,'20080505')
INSERT @T VALUES('B-002',6,1,1,'20080505')
--SELECT * FROM @T
;WITH A AS(
SELECT PARTID,MAX(DMC)DMC,MAX(DMLC)DMLC,MAX(OC)OC
FROM @T
GROUP BY PARTID
)
SELECT *
,(SELECT MIN(VDATE) FROM @T WHERE PARTID+str(DMC)=A.PARTID+str(A.DMC))DMCDATE
,(SELECT MIN(VDATE) FROM @T WHERE
PARTID+str(DMLC)=A.PARTID+str(A.DMLC))DMLCDATE
,(SELECT MIN(VDATE) FROM @T WHERE PARTID+str(OC)=A.PARTID+str(A.OC))OCDATE
FROM A
/*
PARTID+str(DMC)=A.PARTID+str(A.DMC)這段如果有key就用key會比較好
整個寫法沒啥特別的,效率感覺也不好…
*/
※ 引述《mindscold (Minds)》之銘言:
: 請問我有一張表格如下:
: TableA
: PartID DMC DMLC OC VDate
: ===================================
: A-120 12 100 10 2008/1/1
: A-120 10 100 10 2008/2/28
: A-120 10 150 10 2008/5/1
: A-120 10 100 18 2008/6/2
: B-002 3 4 8 2008/2/2
: B-002 3 5 5 2008/5/5
: B-002 6 1 1 2008/5/5
: :
: :
: ===================================
: 我希望能找出單一PartID中,DMC、DMLC、OC最大的值,與該值座落的日期,也就是像下
: 面的:
: View
: PartID DMC DMCDate DMLC DMLCDate OC OCDate
: ================================================
: A-120 12 2008/1/1 150 2008/5/1 18 2008/6/2
: B-002 6 2008/5/5 5 2008/5/5 8 2008/2/2
: :
: :
: ==================================================
: ↑像這樣子的。本來是想用Group by PartID後,去各別找出MAX(DMC)、MAX(DMLC)、
: MAX(OC)後join起來,可是想想這樣豈不是落落長、且總覺得好像效率不高,想想問版眾
: 有沒有更好的方法呢?謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.61.172.157
討論串 (同標題文章)