我在SQL Server中有一个表,结构如下:
RecentSearches(
[Id] int
,[Keyword] string
,[SearchedOn] datetime
)
我需要查询该表以获取最近搜索的100个唯一关键字,按SearchedOn
递减排序。
例如,如果我有以下数据......
1, adam, 1/1/2014 11:0
2, sham, 1/1/2014 11:0
3, ram, 3/1/2014 12:0
4, sham, 4/1/2014 12:0
5, ram, 5/1/2014 12:0
6, sham, 6/1/2014 12:0
7, ram, 7/1/2014 12:0
8, john, 8/1/2014 12:0
......,结果应该告诉我......
john
ram
sham
adam
如果我只查询4个热门关键字。
我可以使用distinct
关键字进行查询;但是我如何使用SearchedOn
字段,因为结果应该按SearchedOn
字段排序?
另外,如果可能的话,我需要在LINQ to Entities中进行此查询。
答案 0 :(得分:1)
尝试以下方法:
(from rs1 in RecentSearches
where rs1.SearchedOn ==
(from rs2 in RecentSearches
where rs2.Keyword == rs1.Keyword
select rs2.SearchedOn).Max()
orderby rs1.SearchedOn descending
select rs1.Keyword).Take(100)
使用您的样本数据,它会产生......
john
ram
sham
adam
......正如所料。
需要注意几点要点:
Distinct
,因为where
条件基于每个SearchedOn
的最大Keyword
- 这本质上是截然不同的。Keyword
值,Take(4)
和Take(100)
将产生相同的结果。答案 1 :(得分:0)
未测试:
LINQ
var lastHundredSearches = (from p in RecentSearches
orderby p.SearchedOn descending
select p.Keyword).Take(100);
LAMBDA
var lastHundredSearches = RecentSearches.OrderByDescending(p => p.SearchedOn).Select(k=>k.Keyword).Take(100);