如何查询 各采集点取得一日之内最大值那条记录

bluespark 2019-08-01 02:18:40
表结构:
StationID , vMax, vMaxTime, AddTime
站点 , 每小时最大值,最大值产生的时间, 添加时间

T003 , 39 , 1403 , 2019-08-01 13:00
T006 , 37 , 1356, 2019-08-01 14:00
T003, 38.5, 1348, 2019-07-31 15:00


每一个站点每小时添加一个值,每天会有24*站点数的记录添加
分组应该是按各采集站点 StationID 和 添加日期 CONVERT(varchar(100), AddTime, 23)
...全文
45 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluespark 2019-08-01
  • 打赏
  • 举报
回复
Bingo, 学习了, 多谢两位版主 。
唐诗三百首 2019-08-01
  • 打赏
  • 举报
回复

select * 
 from [表名] a
 where not exists(select 1 
                  from [表名] b 
                  where b.StationID=a.StationID 
                  and convert(varchar,b.AddTime,23)=convert(varchar,a.AddTime,23)
                  and b.vMax>a.vMax)
二月十六 版主 2019-08-01
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([StationID] nvarchar(24),[vMax] decimal(18,7),[vMaxTime] int,[AddTime] DATETIME)
Insert #T
select N'T003',39,1403,N'2019-08-01 13:00' union all
select N'T006',37,1356,N'2019-08-01 14:00' union all
select N'T003',38.5,1348,N'2019-07-31 15:00'
Go
--测试数据结束
SELECT * FROM (
SELECT
ROW_NUMBER()OVER(PARTITION BY StationID,
CONVERT(VARCHAR(100), AddTime, 23) ORDER BY vMax DESC) rn,*
FROM
#T
)t WHERE t.rn=1


bluespark 2019-08-01
  • 打赏
  • 举报
回复
多谢楼上哥们。 一条记录里面那个 vMaxTime怎么显示 呢? 它不在Goup by里面,写到Select就出错。 要用联合查询吧
二月十六 版主 2019-08-01
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([StationID] nvarchar(24),[vMax] decimal(18,7),[vMaxTime] int,[AddTime] DATETIME)
Insert #T
select N'T003',39,1403,N'2019-08-01 13:00' union all
select N'T006',37,1356,N'2019-08-01 14:00' union all
select N'T003',38.5,1348,N'2019-07-31 15:00'
Go
--测试数据结束
SELECT
StationID,
CONVERT(VARCHAR(100), AddTime, 23) AS AddDate,
MAX(vMax) AS vMax
FROM
#T
GROUP BY
StationID,
CONVERT(VARCHAR(100), AddTime, 23);


34,575

社区成员

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

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