【问题标题】:Aggregate on datetime in sql with group by使用 group by 在 sql 中聚合日期时间
【发布时间】:2012-01-11 17:43:30
【问题描述】:

以下可用于 SQL 的aggregate functions

AVG() - Returns the average value
COUNT() - Returns the number of rows
FIRST() - Returns the first value
LAST() - Returns the last value
MAX() - Returns the largest value
MIN() - Returns the smallest value
SUM() - Returns the sum

我需要在日期时间字段上应用聚合函数吗?它没有在那里列出。 Max()、Min() 将不起作用。我需要的是

  • 返回最新日期
  • 返回最早的日期

有没有可能。我可以以某种方式实现它吗?

【问题讨论】:

  • Max()是什么意思,Min()不行?他们对我很好
  • Max() 和 Min() 在日期字段上应该可以正常工作。你试过了吗?
  • 您的意思是什么日期/时间上下文...您可以将 MIN(SomeDate) 作为 FirstDate 或 MAX(SomeDate) 作为 LastDate... 或者您的意思是所有订单的总和给定日期,但由于订单可能会被标记为全职,因此您需要将 DATE ONLY 部分“分组”。
  • 太棒了。那时我可能有语法错误。

标签: sql sql-server-2005 group-by aggregate-functions


【解决方案1】:

是的,如果日期作为表格的列存在,我们可以,就像我们有一个表格 tbldate 包含名称为 Datecolmn 的列。 然后使用sql查询得到该列的最大值 Like

Select Max(Datecolmn ) from tbldate 

它会为您提供此表中存在的max date.....

【讨论】:

    【解决方案2】:

    当然MINMAX 有效..

    Select 
        Min (MyDate) MinDate, 
        MAX (Mydate) MaxDate, 
        COUNT (Mydate) NumDates
    FROM
    (
        Select GETDATE() + 5 MyDate
        UNION Select GETDATE()+4
        UNION Select GETDATE()+3
        UNION Select GETDATE()+2
        UNION Select GETDATE()+1
        UNION Select GETDATE()-0
        UNION Select GETDATE()-1
        UNION Select GETDATE()-2
        UNION Select GETDATE()-3
        UNION Select GETDATE()-4
        UNION Select GETDATE()-5
    ) DateList
    

    会回来

    MinDate                 MaxDate                 NumDates
    ----------------------- ----------------------- -----------
    2011-11-27 13:14:47.013 2011-12-07 13:14:47.013 11
    
    (1 row(s) affected)
    

    但是,并非所有聚合都有效。 SUM, AVG 不工作,你会收到消息:

    Msg 8117, Level 16, State 1, Line 4
    Operand data type datetime is invalid for avg operator.
    

    【讨论】:

    • 总和(日期时间)?这是什么意思 ?如果您想从给定的 RefDate 聚合过去的时间,那么这应该可以解决问题: DATEADD(ms, SUM(ABS(DATEDIFF(ms, MyDate, RefDate))), 0) 如果 DATETIME 字段存储时间值( DAY='1900-01-01') 那么你可以使用 RefDate = 0 DATEADD(ms, SUM(ABS(DATEDIFF(ms, MyDate, 0))), 0)
    【解决方案3】:

    min() 和 max() 可以很好地处理日期

    你也可以

    最新的

    select top 1 *
    from Table
    order by SomeDate desc
    

    最早

    select top 1 *
    from Table
    order by SomeDate 
    

    顺便说一句,SQL Server 没有 first() 和 last() 函数

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 2020-06-06
      • 1970-01-01
      相关资源
      最近更新 更多