我的日期是varchar(50),在我的数据库中显示如下:
2/15/2012
该表如下所示:(注意: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 |
也许答案不是平均日期,而是最常出现的日期(就某些情况而言)。
任何帮助都将得到sql专家的赞赏。
提前致谢
答案 0 :(得分:3)
忘记浮动废话。怎么样:
SELECT DATEADD(DAY, AVG(DATEDIFF(DAY, 0, create_date)), 0) FROM sys.objects;
在您的情况下,您需要先转换。 E.g。
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;