Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中获得一年内数值字段的最大日值_Sql_Sql Server - Fatal编程技术网

如何在SQL中获得一年内数值字段的最大日值

如何在SQL中获得一年内数值字段的最大日值,sql,sql-server,Sql,Sql Server,如何在MS-SQL中获得一年内数值字段的最大日值这将查询2008年的最大日值: select datepart(dayofyear,datecolumn) , max(value) from yourtable where '2008-01-01' <= datecolumn and datecolumn < '2009-01-01' group by datepart(dayofyear,datecolumn) 或一年中价值最高的一天: select Ye

如何在MS-SQL中获得一年内数值字段的最大日值这将查询2008年的最大日值:

select 
    datepart(dayofyear,datecolumn)
,   max(value)
from yourtable
where '2008-01-01' <= datecolumn and datecolumn < '2009-01-01'
group by datepart(dayofyear,datecolumn)
或一年中价值最高的一天:

select 
    Year = datepart(year,datecolumn),
,   DayOfYear = datepart(dayofyear,datecolumn)
,   MaxValue = max(MaxValue)
from yourtable
inner join (
    select 
        Year = datepart(year,datecolumn), 
    ,   MaxValue = max(value)
    from yourtable
    group by datepart(year,datecolumn)
) sub on 
    sub.Year = yourtable.datepart(year,datecolumn)
    and sub.MaxValue = yourtable.value
group by 
    datepart(year,datecolumn),
    datepart(dayofyear,datecolumn)

这将查询2008年的每日最大值:

select 
    datepart(dayofyear,datecolumn)
,   max(value)
from yourtable
where '2008-01-01' <= datecolumn and datecolumn < '2009-01-01'
group by datepart(dayofyear,datecolumn)
或一年中价值最高的一天:

select 
    Year = datepart(year,datecolumn),
,   DayOfYear = datepart(dayofyear,datecolumn)
,   MaxValue = max(MaxValue)
from yourtable
inner join (
    select 
        Year = datepart(year,datecolumn), 
    ,   MaxValue = max(value)
    from yourtable
    group by datepart(year,datecolumn)
) sub on 
    sub.Year = yourtable.datepart(year,datecolumn)
    and sub.MaxValue = yourtable.value
group by 
    datepart(year,datecolumn),
    datepart(dayofyear,datecolumn)
差不多

SELECT dateadd(dd,0, datediff(dd,0,datetime)) as day, MAX(value) 
FROM table GROUP BY dateadd(dd,0, datediff(dd,0,datetime)) WHERE 
datetime < '2009-01-01' AND datetime > '2007-12-31' 
选择dateadd(dd,0,datediff(dd,0,datetime))作为日期,最大值
从表组按日期添加(dd,0,datediff(dd,0,datetime)),其中
日期时间<'2009-01-01'和日期时间>'2007-12-31'
假设datetime是您的日期列,dateadd(dd,0,datediff(dd,0,datetime))将只提取日期部分,然后您可以按该值分组以获得最大的每日值。不过,可能有一种更漂亮的方式,只获得约会部分

您还可以使用between构造来避免小于和大于

SELECT dateadd(dd,0, datediff(dd,0,datetime)) as day, MAX(value) 
FROM table GROUP BY dateadd(dd,0, datediff(dd,0,datetime)) WHERE 
datetime < '2009-01-01' AND datetime > '2007-12-31' 
选择dateadd(dd,0,datediff(dd,0,datetime))作为日期,最大值
从表组按日期添加(dd,0,datediff(dd,0,datetime)),其中
日期时间<'2009-01-01'和日期时间>'2007-12-31'
假设datetime是您的日期列,dateadd(dd,0,datediff(dd,0,datetime))将只提取日期部分,然后您可以按该值分组以获得最大的每日值。不过,可能有一种更漂亮的方式,只获得约会部分


您还可以使用between构造来避免小于和大于。

您没有提到您使用的是哪种RDBMS或SQL方言。以下内容将与T-SQL(MS SQL Server)配合使用。其他方言可能需要一些修改,因为日期函数在它们之间往往会发生很大变化

SELECT
     DATEPART(dy,  my_date),
     MAX(my_number)
FROM
     My_Table
WHERE
     my_date >= '2008-01-01' AND
     my_date < '2009-01-01'
GROUP BY
     DATEPART(dy, my_date)
选择
日期部分(dy,我的日期),
MAX(我的号码)
从…起
我的桌子
哪里
我的日期>='2008-01-01'和
我的工作日期<'2009-01-01'
分组
日期部分(dy,我的日期)
DAY函数可以是任何函数或函数组合,它们以您希望得到的格式为您提供日期


此外,如果有没有行的天,那么它们将不会被返回。如果您还需要使用空值或前一天的最高值,则需要稍微更改查询。

您没有提到您使用的是哪种RDBMS或SQL方言。以下内容将与T-SQL(MS SQL Server)配合使用。其他方言可能需要一些修改,因为日期函数在它们之间往往会发生很大变化

SELECT
     DATEPART(dy,  my_date),
     MAX(my_number)
FROM
     My_Table
WHERE
     my_date >= '2008-01-01' AND
     my_date < '2009-01-01'
GROUP BY
     DATEPART(dy, my_date)
选择
日期部分(dy,我的日期),
MAX(我的号码)
从…起
我的桌子
哪里
我的日期>='2008-01-01'和
我的工作日期<'2009-01-01'
分组
日期部分(dy,我的日期)
DAY函数可以是任何函数或函数组合,它们以您希望得到的格式为您提供日期


此外,如果有没有行的天,那么它们将不会被返回。如果您还需要使用空值或前一天的最高值的天数,则需要稍微更改查询。

对日期分组,使用
max
委托获取每个日期的最高值,对值进行排序,并获取第一条记录

例如:

select top 1 theDate, max(theValue)
from TheTable
group by theDate
order by max(theValue) desc
(日期字段只需包含此分组工作的日期,即时间组件必须为零。)

如果需要限制特定年份的查询,请在
中使用开始和结束日期,其中
类别:

select top 1 theDate, max(theValue)
from TheTable
where theDate between '2008-01-01' and '2008-12-13'
group by theDate
order by max(theValue) desc

按日期分组,使用
max
委托获取每个日期的最高值,按值排序,并获取第一条记录

例如:

select top 1 theDate, max(theValue)
from TheTable
group by theDate
order by max(theValue) desc
(日期字段只需包含此分组工作的日期,即时间组件必须为零。)

如果需要限制特定年份的查询,请在
中使用开始和结束日期,其中
类别:

select top 1 theDate, max(theValue)
from TheTable
where theDate between '2008-01-01' and '2008-12-13'
group by theDate
order by max(theValue) desc

从你得到的非常不同的建议来看,你需要明确你的意思。从你得到的非常不同的建议来看,你需要明确你的意思。我认为DAY()返回月日,datepart(dy,…)将取一年中的某一天。问题似乎提到了MSSQL。我认为DAY()返回月份的第几天,datepart(dy,…)将取一年中的第几天。这个问题似乎提到了MSSQL。如果包含,您应该使用2008-12-31来代替2009-01-01。在Sql Server中,“2008-12-31”的意思是“2008-12-31 00:00:00.000”,这样就可以跳过一年的最后一天。也许“'2008-01-01'包含在内,您应该使用2008-12-31来代替2009-01-01。在Sql Server中,“2008-12-31”的意思是“2008-12-31 00:00:00.000”,这样会跳过一年的最后一天。也许“'2008-01-01'在Sql Server中,如果按日期字段分组,它将按准确的时刻分组,而不是按整天分组。如果没有等效的datepart(),则“2008-01-01 00:01”和“2008-01-01 00:02”将作为两行结束。是的,时间组件自然必须为零,分组才能工作。谢谢你的澄清。我将添加一个关于分组工作要求的注释。在Sql Server中,如果按日期字段分组,它将在准确的时刻分组,而不是一整天。如果没有等效的datepart(),则“2008-01-01 00:01”和“2008-01-01 00:02”将作为两行结束。是的,时间组件自然必须为零,分组才能工作。谢谢你的澄清。我将添加一个关于分组工作要求的注释。