oracle 查询日期最大值,sql语句查询每天数据中的最大值

案例:

创建天气小时表和天气日期表

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写一个去重的视图,连表查询。

去重视图:

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 参数可以是下列的值:

786bcbc671a1a47c730a17f60ce9d9b1.png

四、实例

1、截取年份:datepart(yy,‘2017-1-1‘) 返回:2017

2、截取月份:datepart(mm,‘2017-1-1‘) 返回:1

五、datepart函数返回的是整型数值,如果需要返回字符型,那么使用datename()函数,用法与datepart相同,只是返回数据类型不同。

------------------------------------------------------------------------------

参考文章:

一 整体思路

假设你表中的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

原文:https://www.cnblogs.com/hao-1234-1234/p/12327241.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值