如何在MS-SQL
中获取一年内数字字段的最大每日值答案 0 :(得分:4)
这将查询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
datepart(year,datecolumn),
, datepart(dayofyear,datecolumn)
, max(value)
from yourtable
group by datepart(year,datecolumn), 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)
答案 1 :(得分:1)
您没有提到您正在使用哪种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)
DAY功能可以是任何功能或功能组合,它可以为您提供您希望获得的格式的日期。
此外,如果有几天没有行,那么它们将不会被返回。如果您需要那些日期以及前一天的NULL或最高值,那么查询将需要稍微更改。
答案 2 :(得分:0)
像
这样的东西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'
假设datetime是您的日期列,dateadd(dd,0,datediff(dd,0,datetime))将仅提取日期部分,然后您可以按该值进行分组以获得每日最大值。可能有一种更漂亮的方式来获得日期部分。
你也可以使用between结构来避免小于和大于。
答案 3 :(得分:0)
在日期分组,使用max
委托获取每个日期的最高值,对值进行排序,并获得第一条记录。
示例:
select top 1 theDate, max(theValue)
from TheTable
group by theDate
order by max(theValue) desc
(日期字段只需包含此分组的工作日期,即时间分量必须为零。)
如果您需要限制特定年份的查询,请在where
条目中使用开始日期和结束日期:
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