【发布时间】:2013-05-29 08:12:43
【问题描述】:
我有下表
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-to-SQL 中执行此操作。您可以在 LINQ-to-objects 中通过自定义比较或自定义类 LINQ 方法滥用
GroupBy来实现(尽管这不再是真正使用 LINQ)。 -
我需要澄清一下。是否将包括五分钟后的所有条目,或者采样是否继续?如果继续,五分钟的窗口是否仍然基于第一个条目,或者每个窗口是否从最后一个接受者开始?
-
@Jodrell:是的,只有 Window 是 5 分钟,条目是几个月和一年。其次,根据该特定用户的数据集中的第一个条目,保留五分钟的窗口。
-
-
您的
only records which have occured after 5 mins from previous selected record似乎与five minute window remain based on the first entry不一致。
标签: c# sql linq linq-to-sql