如何在SQL Qry中获取Avg Date

use*_*332 2 t-sql sql-server

我想在sql中获取平均日期,我不知道如何做到这一点.我有以下字段:

ID   Date1             Date2                   Date3
1    05/04/2012        08/09/2012             07/02/2012
Run Code Online (Sandbox Code Playgroud)

我想添加另一个列,显示ID号1的平均日期.我只做了平均数但从未做过平均日期.谢谢

Tar*_*ryn 6

你可以使用这样的东西,将日期转换为a float然后取平均值:

select t.id, t.date1, t.date2, t.date3, src.AvgDate
from yourtable t
inner join 
(
  select id, cast(avg(date) as datetime) AvgDate
  from
  (
    select id, cast(cast(date1 as datetime) as float) date
    from yourtable
    union all
    select id, cast(cast(date2 as datetime) as float) date
    from yourtable
    union all
    select id, cast(cast(date3 as datetime) as float) date
    from yourtable
  ) x
  group by id
) src
  on t.id = src.id;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

由于您的日期值跨越多列,因此我首先执行unpivot或者union all在单个列中获取值,然后获取该值的平均值.

以下是使用该UNPIVOT函数的另一个示例:

select t.id, t.date1, t.date2, t.date3, src.AvgDate
from yourtable t
inner join 
(
  select id, cast(avg(date) as datetime) AvgDate
  from
  (
    select id, cast(cast(date as datetime) as float) date
    from yourtable
    unpivot
    (
      date
      for col in (date1, date2, date3)
    ) unpiv
  ) x
  group by id
) src
  on t.id = src.id;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo