两个问题 小f及其它老大 看下

bl_mine 2009-11-27 05:34:22
表#SM_SLMC_R_D有数据
STCD TM (全为一天的) VVSWC
60436100 2009-09-16 01:00:00 1.3
60436100 2009-09-16 02:00:00 1.2
60436100 2009-09-16 03:00:00 1.1
60436100 2009-09-16 04:00:00 1.3
60436100 2009-09-16 05:00:00 1.1
60436100 2009-09-16 01:00:00 1.4
60436200 2009-09-16 02:00:00 1.5
60436200 2009-09-16 03:00:00 1.3
。 。 。
。 。 。
。 。 。
目的集为
STCD DT DASMC DMXSMC DMXSMCOT DMNSMC DMNSMCOT
60436100 2009-09-16 1.2 1.3 2009-09-16 01:00:00 1.1 2009-09-16 03:00:00
60436200 2009-09-16 1.4 1.5 2009-09-16 13:00:00 1.3 2009-09-16 15:00:00

以下为按照你和小麦指点 我写的


SELECT A.STCD,CONVERT(VARCHAR(10),A.TM,120)AS DT,
AVG(C.VVSWC)AS DASMC,
B.VVSWC AS DMXSMC, B.TM AS DMXSMCOT,
A.VVSWC AS DMNSMC, A.TM AS DMNSMCOT
FROM
(SELECT *,RN=(SELECT COUNT(1)+1 FROM #SM_SLMC_R_D WHERE VVSWC<a.VVSWC and STCD=a.STCD)FROM #SM_SLMC_R_D a) A
JOIN
(SELECT *,RN=(SELECT COUNT(1)+1 FROM #SM_SLMC_R_D WHERE VVSWC>a.VVSWC and STCD=a.STCD)FROM #SM_SLMC_R_D a) B
ON A.STCD=B.STCD,
#SM_SLMC_R_D C
WHERE A.RN=1 AND B.RN=1
GROUP BY A.STCD,B.STCD,A.TM,B.TM,A.VVSWC,B.VVSWC


现有两个疑问:
第一:当每天的max、min出现相同值时 (发生时间不同) 想不出来 该如何去做 看看你有没有什么好想法
还有就是这段代码 A join B ON A.STCD=B.STCD 的时候 如果max、min出现相同值 就会出现很多交集
第二:算平均值
AVG(C.VVSWC)AS DASMC,
时,算出的总是所有值的平均值,而不是单一STCD的
不知道
 #SM_SLMC_R_D C
该如何约束
...全文
134 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bl_mine 2009-11-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 fredrickhu 的回复:]
看乌龟大侠的
[/Quote]
他的是大小值相同。。。不是有很多最大值。。。你说用top 1 可以吗 就取第一个 可是平均值我想不出来了
--小F-- 2009-11-29
  • 打赏
  • 举报
回复
看乌龟大侠的
bl_mine 2009-11-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dawugui 的回复:]
SQL codecreatetable tb(STCDvarchar(10),TMdatetime, VVSWCdecimal(18,1))insertinto tbvalues('60436100' ,'2009-09-16 01:00:00' ,1.3)insertinto tbvalues('60436100' ,'2009-09-16 02:00:00' ,1.2)insertinto tbvalues('60436100' ,'2009-09-16 03:00:00' ,1.1)insertinto tbvalues('60436100' ,'2009-09-16 04:00:00' ,1.3)insertinto tbvalues('60436100' ,'2009-09-16 05:00:00' ,1.1)insertinto tbvalues('60436100' ,'2009-09-16 01:00:00' ,1.4)insertinto tbvalues('60436200' ,'2009-09-16 02:00:00' ,1.5)insertinto tbvalues('60436200' ,'2009-09-16 03:00:00' ,1.3)go--如果最大值或最小值出现相同时间时,取最小的时间select STCD ,convert(varchar(10),tm,120) dt ,cast(avg(VVSWC)asdecimal(18,1)) DASMC ,max(VVSWC) DMXSMC ,
(selecttop1 TMfrom tbwhere STCD= t.STCDandconvert(varchar(10),tm,120)=convert(varchar(10),t.tm,120)and VVSWC= (selectmax(VVSWC)from tbwhere STCD= t.STCDandconvert(varchar(10),tm,120)=convert(varchar(10),t.tm,120))orderby TM) DMXSMCOT,min(VVSWC) DMNSMC ,
(selecttop1 TMfrom tbwhere STCD= t.STCDandconvert(varchar(10),tm,120)=convert(varchar(10),t.tm,120)and VVSWC= (selectmin(VVSWC)from tbwhere STCD= t.STCDandconvert(varchar(10),tm,120)=convert(varchar(10),t.tm,120))orderby TM) DMNSMCOTfrom tb tgroupby STCD ,convert(varchar(10),tm,120)/*
STCD dt DASMC DMXSMC DMXSMCOT DMNSMC DMNSMCOT
---------- ---------- -------------------- -------------------- ------------------------------------------------------ -------------------- ------------------------------------------------------
60436100 2009-09-16 1.2 1.4 2009-09-16 01:00:00.000 1.1 2009-09-16 03:00:00.000
60436200 2009-09-16 1.4 1.5 2009-09-16 02:00:00.000 1.3 2009-09-16 03:00:00.000

(所影响的行数为 2 行)*/--如果最大值或最小值出现相同时间时,取最大的时间select STCD ,convert(varchar(10),tm,120) dt ,cast(avg(VVSWC)asdecimal(18,1)) DASMC ,max(VVSWC) DMXSMC ,
(selecttop1 TMfrom tbwhere STCD= t.STCDandconvert(varchar(10),tm,120)=convert(varchar(10),t.tm,120)and VVSWC= (selectmax(VVSWC)from tbwhere STCD= t.STCDandconvert(varchar(10),tm,120)=convert(varchar(10),t.tm,120))orderby TMdesc) DMXSMCOT,min(VVSWC) DMNSMC ,
(selecttop1 TMfrom tbwhere STCD= t.STCDandconvert(varchar(10),tm,120)=convert(varchar(10),t.tm,120)and VVSWC= (selectmin(VVSWC)from tbwhere STCD= t.STCDandconvert(varchar(10),tm,120)=convert(varchar(10),t.tm,120))orderby TMdesc) DMNSMCOTfrom tb tgroupby STCD ,convert(varchar(10),tm,120)/*
STCD dt DASMC DMXSMC DMXSMCOT DMNSMC DMNSMCOT
---------- ---------- -------------------- -------------------- ------------------------------------------------------ -------------------- ------------------------------------------------------
60436100 2009-09-16 1.2 1.4 2009-09-16 01:00:00.000 1.1 2009-09-16 05:00:00.000
60436200 2009-09-16 1.4 1.5 2009-09-16 02:00:00.000 1.3 2009-09-16 03:00:00.000

(所影响的行数为 2 行)*/droptable tb
[/Quote]


你理解错了。。说得是在有很多max或者 很多min的时候 时间会有很多 里面有个join 然后就乱了 现在想取最大值第一次出现的时间 帮我看看怎么改?
bl_mine 2009-11-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fredrickhu 的回复:]
我无力了
[/Quote]

小f哥 我现在要想取 最大值和最小值出现的第一次的时间 应该怎么改呢
还有那个平均值的问题
dawugui 2009-11-27
  • 打赏
  • 举报
回复
create table tb(STCD varchar(10),TM datetime, VVSWC decimal(18,1))
insert into tb values('60436100' , '2009-09-16 01:00:00' , 1.3)
insert into tb values('60436100' , '2009-09-16 02:00:00' , 1.2)
insert into tb values('60436100' , '2009-09-16 03:00:00' , 1.1)
insert into tb values('60436100' , '2009-09-16 04:00:00' , 1.3)
insert into tb values('60436100' , '2009-09-16 05:00:00' , 1.1)
insert into tb values('60436100' , '2009-09-16 01:00:00' , 1.4)
insert into tb values('60436200' , '2009-09-16 02:00:00' , 1.5)
insert into tb values('60436200' , '2009-09-16 03:00:00' , 1.3)
go

--如果最大值或最小值出现相同时间时,取最小的时间
select STCD ,
convert(varchar(10),tm,120) dt ,
cast(avg(VVSWC) as decimal(18,1)) DASMC ,
max(VVSWC) DMXSMC ,
(select top 1 TM from tb where STCD = t.STCD and convert(varchar(10),tm,120) = convert(varchar(10),t.tm,120) and VVSWC = (select max(VVSWC) from tb where STCD = t.STCD and convert(varchar(10),tm,120) = convert(varchar(10),t.tm,120)) order by TM) DMXSMCOT,
min(VVSWC) DMNSMC ,
(select top 1 TM from tb where STCD = t.STCD and convert(varchar(10),tm,120) = convert(varchar(10),t.tm,120) and VVSWC = (select min(VVSWC) from tb where STCD = t.STCD and convert(varchar(10),tm,120) = convert(varchar(10),t.tm,120)) order by TM) DMNSMCOT
from tb t
group by STCD ,convert(varchar(10),tm,120)
/*
STCD dt DASMC DMXSMC DMXSMCOT DMNSMC DMNSMCOT
---------- ---------- -------------------- -------------------- ------------------------------------------------------ -------------------- ------------------------------------------------------
60436100 2009-09-16 1.2 1.4 2009-09-16 01:00:00.000 1.1 2009-09-16 03:00:00.000
60436200 2009-09-16 1.4 1.5 2009-09-16 02:00:00.000 1.3 2009-09-16 03:00:00.000

(所影响的行数为 2 行)
*/

--如果最大值或最小值出现相同时间时,取最大的时间
select STCD ,
convert(varchar(10),tm,120) dt ,
cast(avg(VVSWC) as decimal(18,1)) DASMC ,
max(VVSWC) DMXSMC ,
(select top 1 TM from tb where STCD = t.STCD and convert(varchar(10),tm,120) = convert(varchar(10),t.tm,120) and VVSWC = (select max(VVSWC) from tb where STCD = t.STCD and convert(varchar(10),tm,120) = convert(varchar(10),t.tm,120)) order by TM desc) DMXSMCOT,
min(VVSWC) DMNSMC ,
(select top 1 TM from tb where STCD = t.STCD and convert(varchar(10),tm,120) = convert(varchar(10),t.tm,120) and VVSWC = (select min(VVSWC) from tb where STCD = t.STCD and convert(varchar(10),tm,120) = convert(varchar(10),t.tm,120)) order by TM desc) DMNSMCOT
from tb t
group by STCD ,convert(varchar(10),tm,120)
/*
STCD dt DASMC DMXSMC DMXSMCOT DMNSMC DMNSMCOT
---------- ---------- -------------------- -------------------- ------------------------------------------------------ -------------------- ------------------------------------------------------
60436100 2009-09-16 1.2 1.4 2009-09-16 01:00:00.000 1.1 2009-09-16 05:00:00.000
60436200 2009-09-16 1.4 1.5 2009-09-16 02:00:00.000 1.3 2009-09-16 03:00:00.000

(所影响的行数为 2 行)
*/

drop table tb
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xming4321 的回复:]
引用 6 楼 fredrickhu 的回复:
我无力了


f姐姐最厉害了 我相信
[/Quote]
我也相信
十一文 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fredrickhu 的回复:]
我无力了
[/Quote]

f姐姐最厉害了 我相信
--小F-- 2009-11-27
  • 打赏
  • 举报
回复
我无力了
bancxc 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 js_szy 的回复:]
引用 3 楼 icelovey 的回复:
引用 2 楼 feixianxxx 的回复:
引用 1 楼 sgtzzc 的回复:
等F姐姐

....


[/Quote].
华夏小卒 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 icelovey 的回复:]
引用 2 楼 feixianxxx 的回复:
引用 1 楼 sgtzzc 的回复:
等F姐姐

....

[/Quote].
icelovey 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feixianxxx 的回复:]
引用 1 楼 sgtzzc 的回复:
等F姐姐

....
[/Quote]
feixianxxx 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sgtzzc 的回复:]
等F姐姐
[/Quote]
....
sgtzzc 2009-11-27
  • 打赏
  • 举报
回复
等F姐姐

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧