取一段时间,最大数据和最小数据的 2个记录

山豆 2008-10-28 09:49:45
我有一个数据采集的表

点 数据 时间
1 100 1:23
1 100 1:24
1 80 1:25
1 90 1:26
1 5 1:27
2 180 1:23
2 190 1:25
2 111 1:27

上面这段数据是我对2个点的数据的采集,
现在我需要查询出这个2个点的数据这段时间的最大值和最小值对应的数据和时间点
最大或者最小重复,任意取一条(或者取时间小的条)
点 最大数据 对大数据对应时间 最小数据 最小数据对应时间
1 100 1:23 5 1:27
2 190 1:25 111 1:27
这样的,好像难度很大,关键那个随意取一条好像比较麻烦
...全文
285 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
StrutHibernate 2008-10-28
  • 打赏
  • 举报
回复

DECLARE @TB TABLE(点 INT, 数据 INT, 时间 VARCHAR(10))
INSERT @TB
SELECT 1, 100, '1:23' UNION ALL
SELECT 1, 100, '1:24' UNION ALL
SELECT 1, 80, '1:25' UNION ALL
SELECT 1, 90, '1:26' UNION [code=SQL]ALL
SELECT 1, 5, '1:27' UNION ALL
SELECT 2, 180, '1:23' UNION ALL
SELECT 2, 190, '1:25' UNION ALL
SELECT 2, 111, '1:27'

select * from

(SELECT 点,最大数据=max(数据),大数据对应时间=(select min(时间) from @TB where 点=A.点 and 数据=max(A.数据)) from @TB A group by 点)a
,
(SELECT 点,最小数据=min(数据),小数据对应时间=(select max(时间) from @TB where 点=B.点 and 数据=min(B.数据)) from @TB B group by 点)b

where a.点=b.点


/*
点 最大数据 对大数据对应时间 最小数据 最小数据对应时间
----------- ----------- ---------- ----------- ----------
1 100 1:23 5 1:27
2 190 1:25 111 1:27
*/

StrutHibernate 2008-10-28
  • 打赏
  • 举报
回复

DECLARE @TB TABLE(点 INT, 数据 INT, 时间 VARCHAR(10))
INSERT @TB
SELECT 1, 100, '1:23' UNION ALL
SELECT 1, 100, '1:24' UNION ALL
SELECT 1, 80, '1:25' UNION ALL
SELECT 1, 90, '1:26' UNION ALL
SELECT 1, 5, '1:27' UNION ALL
SELECT 2, 180, '1:23' UNION ALL
SELECT 2, 190, '1:25' UNION ALL
SELECT 2, 111, '1:27'


select * from

(SELECT 点,最大数据=max(数据),大数据对应时间=(select min(时间) AS 大数据对应时间 from @TB where 点=A.点 and 数据=max(A.数据)) from @TB A group by 点)a
,
(SELECT 点,最小数据=min(数据),小数据对应时间=(select max(时间) AS 大数据对应时间 from @TB where 点=B.点 and 数据=min(B.数据)) from @TB B group by 点)b

where a.点=b.点
等不到来世 2008-10-28
  • 打赏
  • 举报
回复
上面是取时间最小的。

随意取一条:
DECLARE @TB TABLE(点 INT,  数据 INT,    时间 VARCHAR(10))
INSERT @TB
SELECT 1, 100, '1:23' UNION ALL
SELECT 1, 100, '1:24' UNION ALL
SELECT 1, 80, '1:25' UNION ALL
SELECT 1, 90, '1:26' UNION ALL
SELECT 1, 5, '1:27' UNION ALL
SELECT 2, 180, '1:23' UNION ALL
SELECT 2, 190, '1:25' UNION ALL
SELECT 2, 111, '1:27'


select [点]
,[最大数据]=max([数据])
,[对大数据对应时间]=(select top 1 [时间] from @TB where [点]=t.[点] and [数据]=max(t.[数据]) order by newid())
,[最小数据]=min([数据])
,[最小数据对应时间]=(select top 1 [时间] from @TB where [点]=t.[点] and [数据]=min(t.[数据]) order by newid())
from @TB t
group by [点]
等不到来世 2008-10-28
  • 打赏
  • 举报
回复
DECLARE @TB TABLE(点 INT,  数据 INT,    时间 VARCHAR(10))
INSERT @TB
SELECT 1, 100, '1:23' UNION ALL
SELECT 1, 100, '1:24' UNION ALL
SELECT 1, 80, '1:25' UNION ALL
SELECT 1, 90, '1:26' UNION ALL
SELECT 1, 5, '1:27' UNION ALL
SELECT 2, 180, '1:23' UNION ALL
SELECT 2, 190, '1:25' UNION ALL
SELECT 2, 111, '1:27'


select [点]
,[最大数据]=max([数据])
,[对大数据对应时间]=(select min([时间]) from @TB where [点]=t.[点] and [数据]=max(t.[数据]))
,[最小数据]=min([数据])
,[最小数据对应时间]=(select min([时间]) from @TB where [点]=t.[点] and [数据]=min(t.[数据]))
from @TB t
group by [点]

/*
点 最大数据 对大数据对应时间 最小数据 最小数据对应时间
----------- ----------- ---------- ----------- ----------
1 100 1:23 5 1:27
2 190 1:25 111 1:27
*/
山豆 2008-10-28
  • 打赏
  • 举报
回复
点 大数据 大时间 点 小数据 小时间
----------- ----------- ---------- ----------- ----------- ----------
1 100 1:23 1 5 1:27
1 100 1:24 1 5 1:27
2 190 1:25 2 111 1:27

结果这样了,我想同一个点,随便取一条
点 大数据 大时间 点 小数据 小时间
----------- ----------- ---------- ----------- ----------- ----------
1 100 1:23 1 5 1:27
2 190 1:25 2 111 1:27

这样,如何搞
jiangshun 2008-10-28
  • 打赏
  • 举报
回复
DECLARE @TB TABLE(点 INT, 数据 INT, 时间 VARCHAR(10))
INSERT @TB
SELECT 1, 100, '1:23' UNION ALL
SELECT 1, 100, '1:24' UNION ALL
SELECT 1, 80, '1:25' UNION ALL
SELECT 1, 90, '1:26' UNION ALL
SELECT 1, 5, '1:27' UNION ALL
SELECT 2, 180, '1:23' UNION ALL
SELECT 2, 190, '1:25' UNION ALL
SELECT 2, 111, '1:27'

SELECT * FROM (
select 点 as 点,数据 as 大数据,时间 as 大时间 from @TB t where not exists(select 1 from @TB where 数据>t.数据 and t.点=点) )M
join(select 点 as 点,数据 as 小数据,时间 as 小时间 from @TB t where not exists(select 1 from @TB where 数据<t.数据 and t.点=点)) N
on M.点=N.点
山豆 2008-10-28
  • 打赏
  • 举报
回复
每天进步一点点

你们理解错我的意思了,那个时间不是要最小的,
我的意思是,那个时间显示的是最大数据对应的时间 和最小数据对应的时间

说白了,我是要找到采集的数据中,对应的最大数值和最小数值的2条记录
山豆 2008-10-28
  • 打赏
  • 举报
回复
扬帆破浪
你好,我按照你的写,好像有问题,出现很多重复的数据
水族杰纶 2008-10-28
  • 打赏
  • 举报
回复
DECLARE @TB TABLE(点 INT,  数据 INT,    时间 VARCHAR(10))
INSERT @TB
SELECT 1, 100, '1:23' UNION ALL
SELECT 1, 100, '1:24' UNION ALL
SELECT 1, 80, '1:25' UNION ALL
SELECT 1, 90, '1:26' UNION ALL
SELECT 1, 5, '1:27' UNION ALL
SELECT 2, 180, '1:23' UNION ALL
SELECT 2, 190, '1:25' UNION ALL
SELECT 2, 111, '1:27'

SELECT * FROM (
SELECT 点,MAX(数据) AS 最大数据,MIN( 时间) AS 大数据对应时间 FROM @TB GROUP BY 点) M
JOIN (
SELECT 点,MIN(数据) AS 最小数据,MAX( 时间) AS 小数据对应时间 FROM @TB GROUP BY 点) N
ON M.点=N.点
/*点 最大数据 大数据对应时间 点 最小数据 小数据对应时间
----------- ----------- ---------- ----------- ----------- ----------
1 100 1:23 1 5 1:27
2 190 1:23 2 111 1:27
*/
csdyyr 2008-10-28
  • 打赏
  • 举报
回复


DECLARE @TB TABLE(点 INT, 数据 INT, 时间 VARCHAR(10))
INSERT @TB
SELECT 1, 100, '1:23' UNION ALL
SELECT 1, 100, '1:24' UNION ALL
SELECT 1, 80, '1:25' UNION ALL
SELECT 1, 90, '1:26' UNION ALL
SELECT 1, 5, '1:27' UNION ALL
SELECT 2, 180, '1:23' UNION ALL
SELECT 2, 190, '1:25' UNION ALL
SELECT 2, 111, '1:27'

SELECT * FROM (
SELECT 点,MAX(数据) AS 最大数据,MIN( 时间) AS 最小时间 FROM @TB GROUP BY 点) M
JOIN (
SELECT 点,MIN(数据) AS 最小数据,MIN( 时间) AS 最小时间 FROM @TB GROUP BY 点) N
ON M.点=N.点
/*
点 最大数据 最小时间 点 最小数据 最小时间
----------- ----------- ---------- ----------- ----------- ----------
1 100 1:23 1 5 1:23
2 190 1:23 2 111 1:23
*/

Yang_ 2008-10-28
  • 打赏
  • 举报
回复
可能需要时间条件

select a.点,a.数据 as 最大数据,a.时间 as 对大数据对应时间,
b.数据 as 最小数据,b.时间 as 最小数据对应时间
from tab a,tab b
where a.点=b.点
and a.时间 between 时间1 and 时间2
and b.时间 between 时间1 and 时间2
and not exists (
select 1 from tab
where 点=a.点
and 时间 between 时间1 and 时间2
and (数据>a.数据 or 数据=a.数据 and 时间<a.时间)
)
and not exists (
select 1 from tab
where 点=b.点
and 时间 between 时间1 and 时间2
and (数据<b.数据 or 数据=a.数据 and 时间<a.时间)
)
Yang_ 2008-10-28
  • 打赏
  • 举报
回复
select a.点,a.数据 as 最大数据,a.时间 as 对大数据对应时间,
b.数据 as 最小数据,b.时间 as 最小数据对应时间
from tab a,tab b
where a.点=b.点
and not exists (
select 1 from tab
where 点=a.点
and (数据>a.数据 or 数据=a.数据 and 时间<a.时间)
)
and not exists (
select 1 from tab
where 点=b.点
and (数据<b.数据 or 数据=a.数据 and 时间<a.时间)
)


22,301

社区成员

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

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