作者grence (多想两分钟 = =")
看板Database
标题Re: [SQL ] 怎麽求最大值/最小值?
时间Fri Dec 5 15:38:15 2008
想像错误,我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