sql server求分组最大值,最小值,最大值对应时间,和最小值对应时间

人生初见 2015-05-29 02:59:28

我需要分组查询13301,13302的最大值,最大值对应的时间,最小值,最小值对应的时间,这个改怎么写
...全文
928 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
习惯性蹭分 2015-05-30
  • 打赏
  • 举报
回复
try this

;with t1 as(
select * from tab a where not exists(select 1 from tab where senid=a.senid and minv>a.minv)
),t2
as(
select * from tab a where not exists(select 1 from tab where senid=a.senid and maxv<a.mav)
)
select isnull(t1.senid,t2.senid) as senid,t1.minv,t1.mint,t2.maxv.t2.maxt
from t1 
full join t2
on t1.senid=t2.senid
gw6328 2015-05-29
  • 打赏
  • 举报
回复

;with cte as(
	select *,rn1=ROW_NUMBER() over(partition by senid order by minv asc),rn2=ROW_NUMBER() over(partition by senid order by maxv desc) from tb
)
select senid,min(minv)as minv,max(maxv) as maxv,max(case when rn1=1 then mint else '1900-01-01'end) as maxt,max(case when rn2=1 then mint else '1900-01-01' end) as maxt  from cte
group by senid 

还在加载中灬 2015-05-29
  • 打赏
  • 举报
回复
;WITH CTE AS(
SELECT senid,minv,maxv,maxt,mint
,CONVERT(VARCHAR(7),mint,120)minM
,CONVERT(VARCHAR(7),maxt,120)maxM
,ROW_NUMBER()OVER(PARTITION BY senid,CONVERT(VARCHAR(7),mint,120) ORDER BY minv)minRN
,ROW_NUMBER()OVER(PARTITION BY senid,CONVERT(VARCHAR(7),maxt,120) ORDER BY maxv DESC)maxRN
FROM TB
)
SELECT T1.senid,T1.minv,T1.mint,T2.maxv,T2.maxt
FROM CTE T1
JOIN CTE T2 ON T1.senid=T2.senid AND T1.minM=T2.maxM
WHERE T1.minRN=1 AND T2.maxRN=1
人生初见 2015-05-29
  • 打赏
  • 举报
回复
如果按照senid还有时间按照月的分组,求最大值,最小值,最大值对应时间,最小值对应时间改怎么写
人生初见 2015-05-29
  • 打赏
  • 举报
回复
引用 8 楼 xxzxwsx 的回复:

;with t AS
(
select senid, MAX(maxv) maxv, MIN(minv) minv
from tb
group by senid
)
select t.senid, t.maxv, MAX(tb.maxt) maxt, t.minv, MIN(t2.mint) mint
from t JOIN tb ON tb.senid=t.senid AND tb.maxv=t.maxv
  JOIN tb t2 ON t2.senid=t.senid AND t2.minv=t.minv
group by t.senid, t.maxv,  t.minv
如果最大值对应两个或以上的时间,取最大时间吗? 最小值也有同样问题
如果最大值有多个时间,取其中一个
在路上_- 2015-05-29
  • 打赏
  • 举报
回复

;with t AS
(
select senid, MAX(maxv) maxv, MIN(minv) minv
from tb
group by senid
)
select t.senid, t.maxv, MAX(tb.maxt) maxt, t.minv, MIN(t2.mint) mint
from t JOIN tb ON tb.senid=t.senid AND tb.maxv=t.maxv
  JOIN tb t2 ON t2.senid=t.senid AND t2.minv=t.minv
group by t.senid, t.maxv,  t.minv
如果最大值对应两个或以上的时间,取最大时间吗? 最小值也有同样问题
在路上_- 2015-05-29
  • 打赏
  • 举报
回复
楼主给生成测试数据的语句吧
人生初见 2015-05-29
  • 打赏
  • 举报
回复
楼上的方法用了,没有查出来
在路上_- 2015-05-29
  • 打赏
  • 举报
回复
试试

;with t AS
(
select senid, MAX(maxv) maxv, MIN(minv) minv
from tb
group by senid
)
select t.senid, t.maxv, tb.maxt, t.minv, t2.mint
from t JOIN tb ON tb.senid=t.senid AND tb.maxv=t.maxv
  JOIN tb t2 ON t2.senid=t.senid AND t2.minv=t.minv
还在加载中灬 2015-05-29
  • 打赏
  • 举报
回复
;WITH CTE AS(
SELECT senid,minv,maxv,maxt,mint
,ROW_NUMBER()OVER(PARTITION BY senid ORDER BY minv)minRN
,ROW_NUMBER()OVER(PARTITION BY senid ORDER BY maxv DESC)maxRN
FROM TB
)
SELECT T1.senid,T1.minv,T1.mint,T2.maxv,T2.maxt
FROM CTE T1
JOIN CTE T2 ON T1.senid=T2.senid
WHERE T1.minRN=1 AND T2.maxRN=2
人生初见 2015-05-29
  • 打赏
  • 举报
回复
有没有人能帮帮忙,谢谢啦
人生初见 2015-05-29
  • 打赏
  • 举报
回复
有没有人能帮帮忙,谢谢啦
人生初见 2015-05-29
  • 打赏
  • 举报
回复
有没有人能帮帮忙,谢谢啦

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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