sqlserver查询一天中时间最大的那行数据
案例:
创建天气小时表和天气日期表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | create table dbo.T_WeatherStreetDataHourly ( ID bigint identity(1, 1), DDATETIME datetime not null , OBTID nvarchar(50) collate Chinese_PRC_CI_AS not null , WDIDF2 float null , WDIDD2 float null , constraint PK_T_WeatherStreetDataHourly primary key (ID) on "PRIMARY" ) on "PRIMARY" go create table dbo.T_WeatherStreetDataDaily ( ID bigint identity(1, 1), DDATETIME datetime not null , OBTID nvarchar(50) collate Chinese_PRC_CI_AS not null , DAYWD3SMAXDF2 float null , DAYWD3SMAXDD2 float null , constraint PK_T_WeatherStreetDataDaily primary key (ID) on "PRIMARY" ) on "PRIMARY" go |
问题:他们都只有 datetime 时间,没有日期date和hour 数据。且datetime 存在重复数据。而显示需要去重显示。
两种方案:1导入数据时去重;2写一个去重的视图,连表查询。
去重视图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | CREATE VIEW V_WeatherStreetDataDailyPart AS SELECT CONVERT ( date ,DDATETIME,112) as DATEA, MAX (DDATETIME) as MaxDATETIME,OBTID FROM T_WeatherStreetDataDaily GROUP BY CONVERT ( date ,DDATETIME,112),OBTID select * from V_WeatherStreetDataDaily order by DATEA CREATE VIEW V_WeatherStreetDataHourlyPart AS SELECT CONVERT ( date ,DDATETIME,112) as DATEA,DATEPART(hh,DDATETIME) as Hour , OBTID , Max (DDATETIME) as MaxDATETIME FROM T_WeatherStreetDataHourly GROUP BY CONVERT ( date ,DDATETIME,112),DATEPART(hh,DDATETIME),OBTID |
过滤出重复的记录中 日或(日+小时组合)中的DDATETIME 最大的那一行记录!
然后根据 OBTID 和MaxDATETIME 连表查询。
--------------------------------------------------------------------------------------------
知识点1
selectconvert(date,getdate()) selectconvert(date,'2016-11-5 12:20:45.567')
显示:2016-11-05
知识点2
sqlserver 截取日期年份和月份使用datepart函数,函数使用方法如下:
一、函数功能:DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
二、语法:DATEPART(datepart,date)
三、参数说明:date 参数是合法的日期表达式。datepart 参数可以是下列的值:
四、实例
1、截取年份:datepart(yy,'2017-1-1') 返回:2017
2、截取月份:datepart(mm,'2017-1-1') 返回:1
五、datepart函数返回的是整型数值,如果需要返回字符型,那么使用datename()函数,用法与datepart相同,只是返回数据类型不同。
------------------------------------------------------------------------------
参考文章:
一 整体思路
https://zhidao.baidu.com/question/93803326.html
假设你表中的DATA_TIME字段是日期类型,如果是字符类型,需要对下列语句做修改
SQL SERVER
SELECT CONVERT(CHAR(8),DATA_TIME,112) 日期,MAX(DATA_DATA)
FROM TABLE_NAME
GROUP BY CONVERT(CHAR(8),DATA_TIME,112)
ORDER BY 1
ORACLE
SELECT TRUNC(DATA_TIME) 日期,MAX(DATA_DATA)
FROM TABLE_NAME
GROUP BY TRUNC(DATA_TIME)
ORDER BY 1;
按照你的要求的话是不是要保留每条记录,然后每条记录再显示出当日的最大值?
如果是这样,SQL SERVER中需要原表和每日的最大值的嵌套表做关联;ORACLE用分析函数,下面是ORACLE的语句
SELECT TO_CHAR(DATA_TIME,'YYYY-MM-DD HH24:MI:SS') 时间,
DATA_DATA "当前值",
MAX(DATA_DATA) OVER(PARTITION BY TRUNC(DATA_TIME))"当日最大值"
FROM TABLE_NAME
ORDER BY 1;
二、
SQL Server取datetime的日期部分
https://www.cnblogs.com/edong/archive/2016/11/18/6077922.html
三
SQL按照日、周、月、季度、年统计数据的方法
转载源:http://www.jb51.net/article/42613.htm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具