2017-02-28 5 views
0

私は、この表のDDLがあります。私がやりたい何グループ内で月ごとに行を並べてグループを実行するにはどうすればよいですか?

CREATE TABLE [dbo].[Audit] 
(
    [AuditId] INT   IDENTITY (1, 1) NOT NULL, 
    [Entity] INT   NOT NULL, 
    [UserId] INT   NOT NULL, 
    [Note] VARCHAR(200) NULL, 
    [Date] DATETIME  NOT NULL, 
    [Action] INT   NOT NULL, 

    CONSTRAINT [PK_Audit] 
     PRIMARY KEY CLUSTERED ([AuditId] ASC) 
); 

は一日でグループを持つ単一のユーザーIDのための活動の数(行)を示すレポートを取得することです。

これはLINQで可能なことですか、何とかDATETIMEフィールドから日付を抽出する必要があるため、SQLでコーディングする必要があります。

SQL SELECTを高く評価しても、これに関するいくつかの助けと助言があります。

Date   Count 
---------------------  
29-Feb-2018 25 
28-Feb-2018 33 
27-Feb-2018 11 
26-Feb-2018 44 

答えて

0

あなたのEFモデルはテーブルのように見えると仮定すると、あなたはこのLINQ文を使用することができます

from a in context.Audits 
group a by EntityFunctions.TruncateTime(a.Date) into grp 
select new 
{ 
    Date = grp.Key, 
    Count = grp.Count() 
} 

あなたは、エンティティフレームワーク4をタグ付けするので、あなたはEntityFunctionsを使用する必要があります。これ以降のバージョンではDbFunctionsに変更されました。

1

キーワードを列名またはオブジェクト名として使用しないでください。実際は混乱します。しかし、あなたの例を使用すると、これは非常に簡単なクエリです。

select [Date] = convert(date, a.Date) 
    , [Count] = count(*) 
from Audit a 
group by convert(date, a.Date) 
+0

ありがとうございました。私が降順の順序でこれを持っていたいのであれば、そのグループの後にorderbyを置くことができますか? –

+1

もちろん可能です。 :) –

+0

私はこれをチェックしましたが、数千の異なる日付(日付全体ではありません)が存在するため、正しくグループ化されません。どういうわけか、グループの人は、変換された日付も使用しなければならないと思います。 –

関連する問題