[英]Select only most recent record for each group of records
我有一個數據庫實體,看起來像這樣:
public class History
{
public int Id {get; set;}
public string Text {get; set;}
public DateTime DateTime {get; set;}
}
在db中,可以有多個具有相同Text
值的記錄,而我只需要獲取它們,它們是每個不同的“ Text”的最新記錄(最新記錄)-因此,對於每個Text
值,我應該只獲取一個最新記錄。
例如,名為歷史記錄的數據庫表:
id | text | dateTime
---------------------
1 abc 2018-01-05
2 qqq 2018-01-08
3 abc 2018-01-01
4 qqq 2018-05-05
5 abc 2018-01-03
查詢結果應如下所示:
1 abc 2018-01-05
4 qqq 2018-05-05
現在,使用nHibernate我正在這樣做:
var historyGroups = _session.Query<History>
.OrderBy(x => x.DateTime)
.GroupBy(x => x.Text)
.ToArray();
然后為每個組選擇最后一個項目-但它會提取很多我不需要的數據。
如何通過LINQ to SQL或通過純SQL更有效地實現這一目標?
您應該在訂購前分組:
var historyGroups = _session.Query<History>
.GroupBy(x => x.Text)
.Select(x => new { text = x.Key, latest = x.First(y => y.DateTime == x.Select(z => z.DateTime).Max()) })
.ToArray();
我最終使用了這樣的原始SQL:
var data = _session.CreateSQLQuery("select distinct on (text) * from public.history
order by text, datetime desc;")
.AddEntity(typeof(History))
.List<History>();
它會為每個不同的Text
值返回最新記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.