2011-07-19 14 views
1

私はEntity Frameworkにデータベースフィールドの1分ごとに1レコードを返すような方法を探しています。下の表のために:1分あたり1レコードを選択

Message | Timestamp 
--------+-------------------- 
a  | 2011-01-02 12:31:10 
b  | 2011-01-02 12:31:15 
c  | 2011-01-02 12:31:59 
d  | 2011-01-02 12:32:01 
e  | 2011-01-02 12:32:30 
f  | 2011-01-02 12:33:10 

私は

c,e,f (c and e are selected because they are the latest entries) 

を返すクエリを単一のクエリを使用して、おそらくこれですしたいですか?データベースはかなり大きいので、すべてのレコードを取得してループ内で選択する必要はありません。

+0

年、月、日、時、分でグループ化します。タイムスタンプで値をソートします。各グループの最初のエントリを選択します。 –

答えて

1

私はLinqをEFの代わりにメモリ内のコレクションに使用しますが、これを簡単に適応させることができます。

private static void LinqExample() 
    { 
     var a = new object[] 
        { 
         new object[] {"a", DateTime.Parse(" 2011-01-02 12:31:10")}, 
         new object[] {"b", DateTime.Parse(" 2011-01-02 12:31:15")}, 
         new object[] {"c", DateTime.Parse(" 2011-01-02 12:31:59")}, 
         new object[] {"d", DateTime.Parse(" 2011-01-02 12:32:01")}, 
         new object[] {"e", DateTime.Parse(" 2011-01-02 12:32:30")}, 
         new object[] {"f", DateTime.Parse(" 2011-01-02 12:33:10")}, 
        }; 

     var result = from pair in a 
        let msg = (string) ((object[]) pair)[0] 
        let date = (DateTime) ((object[]) pair)[1] 
        group new {date, msg} by new {date.Year, date.Month, date.Day, date.Hour, date.Minute} 
        into dateGroup 
        select dateGroup.OrderBy(dg => dg.date).Last(); 

     foreach (var res in result) 
     { 
      Console.WriteLine(res.msg); 
     } 
    } 
0

正確な構文はわかりませんが、以下は役立ちます。 SQLパフォーマンスをさらに向上させることができます。

選択sometableからID(分、日によってsometableグループからMAXID時間を選択)で*

+0

質問はEntity Frameworkについてです... –

+0

あなたはそのテーブルに多くのエントリがある場合は、より良いパフォーマンスのために日付、時間、分(そして必要な場合は秒)にタイムスタンプを分割することをお勧めします – tehvan

+0

おそらくDATEPARTはあなたを助けることができます.... http://msdn.microsoft.com/it-it/library/ms174420.aspx – 2GDev

0
SELECT 
    MAX([Message]) 
FROM 
    [Messages] 
GROUP BY 
    DATEPART(yyyy, [Timestamp]) 
    ,DATEPART(mm, [Timestamp]) 
    ,DATEPART(dd, [Timestamp]) 
    ,DATEPART(hh, [Timestamp]) 
    ,DATEPART(mi, [Timestamp]) 

これは、メッセージ欄にはあなたのサンプルデータが示すようにタイムスタンプ列と相関することを前提としています。

UPDATE

ただ、これはEFではなく、まっすぐなSQLを探していることがわかりました。 @RossはLINQクエリの答えがあるようです。ここではSQLを参考にしておきます。

関連する問題