我有如下表的时间间隔内只选择第一条记录
CREATE TABLE [dbo].[DeviceLogs](
[DeviceLogId] [int] IDENTITY(1,1) NOT NULL,
[UserId] [nvarchar](50) NULL,
[LogDate] [datetime2](0) NULL,
)
GO
数据样本
1 1 2013-05-29 11:05:15 //accepted (its the first occurance for userid 1)
2 1 2013-05-29 11:05:20 //discarded (within 5 mins from 1st record)
3 1 2013-05-29 11:07:56 //discarded (within 5 mins from 1st record)
4 1 2013-05-29 11:11:15 //accepted (after 5 mins from 1st occurance)
5 2 2013-05-29 11:06:05 //accepted (its the first occurance for userid 2)
6 2 2013-05-29 11:07:18 //discarded (within 5 mins from 1st record)
7 2 2013-05-29 11:09:38 //discarded (within 5 mins from 1st record)
8 2 2013-05-29 11:12:15 //accepted (after 5 mins from 1st occurance)
我只想选择其中之后,从以前选择的记录5分钟已经发生的记录和包括数据集内的第一条记录
所需的输出是
1 1 2013-05-29 11:05:15
4 1 2013-05-29 11:11:15
5 2 2013-05-29 11:06:05
8 2 2013-05-29 11:12:15
我想要的GroupBy,但是没有得到日
db.DeviceLogs.GroupBy(g=>new {g.LogDate.Year,
g.LogDate.Month,
g.LogDate.Day,
g.LogDate.Hour,
g.LogDate.Minutes,
g.UserID})
.Select(s=>new {UserID=s.Key.UserID, s.???});
预先感谢您。
,我不认为你可以在LINQ到SQL做到这一点。你可以通过滥用带有自定义比较的'GroupBy',或者使用类似LINQ的自定义方法(尽管这不再使用LINQ)来实现LINQ到对象。 – Rawling
我需要一点澄清。五分钟后的所有参赛作品是否包含在内,或者抽样是否继续?如果继续,那么基于第一个条目的五分钟窗口会保留吗,或者,每个窗口是否从最后一个接受者开始? – Jodrell
@Jodrell:是的,只有窗口是5分钟,条目是几个月和一年。其次,五分钟的窗口仍然基于该特定用户的数据集中的第一个条目。 – Marshal