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 に答える