0

我的日期是 varchar(50),在我的数据库中显示如下:

2012 年 2 月 15 日

该表如下所示:(注意:someid 不是主键,它标识一个组)

 |  someid  |   date     |  float_value  | 
 |   1      | 2/15/2012  |     3.2       |   
 |   1      | 2/15/2012  |     1.4       |
 |   1      | 2/15/2012  |     2.1       |
 |   1      | 2/16/2012  |     1.8       |

我将如何做这样的事情:

select avg(date), avg(float_value)
where someid = 1

要返回这样的东西:

|  date     |  float_value  |
| 2/15/2012 |   2.126       |     

也许答案不是平均日期,而是最常发生的日期(就 someid 而言)。

sql专家将不胜感激任何帮助。

提前致谢

4

1 回答 1

3

忘记浮动废话。怎么样:

SELECT DATEADD(DAY, AVG(DATEDIFF(DAY, 0, create_date)), 0) FROM sys.objects;

在您的情况下,您需要先转换。例如

SELECT 
  avg_date = DATEADD(DAY, AVG(DATEDIFF(DAY, 0, CONVERT(SMALLDATETIME, [date]))), 0) 
FROM dbo.yourtable
WHERE someid = 1;

这种变化也可能有用:

SELECT 
  someid, 
  avg_date = DATEADD(DAY, AVG(DATEDIFF(DAY, 0, CONVERT(SMALLDATETIME, [date]))), 0) 
FROM dbo.yourtable
GROUP BY someid;

编辑以呈现似乎必要的确切精确和特定格式:

SELECT 
  avg_date = CONVERT(CHAR(10), 
    DATEADD(DAY, AVG(DATEDIFF(DAY, 0, CONVERT(SMALLDATETIME, [date]))), 0),
    101) 
FROM dbo.yourtable
WHERE someid = 1;
于 2012-07-18T13:18:31.143 回答