将项目分组到第一次出现

时间:2009-10-14 08:41:50

标签: sql linq-to-sql

今天早上我完全无法为我的问题写一个正确的查询,所以希望那里有人可以帮助我。

我有一个名为Sessions的数据库表,基本上看起来像这样

Sessions:
  SessionID
  SessionStarted
  IPAddress
  ..other meta data..

我有一个要求,即我要显示在给定时间段内每天到达多少个新会话(其中新定义来自以前未见过的IPAddress)。基本上,每个IPAddress在结果中只计算一次,即从IPAddress开始的第一个会话的那一天。所以我正在寻找一个结果:

[Date]      [New]
2009-10-01 : 11
2009-10-02 : 6
2009-10-03 : 19
..and so on

...我可以在一些漂亮的图表上绘制并向重要人物展示。我非常喜欢Linq2SQL查询,因为这是我们目前用于数据访问的,但如果我运气不好,我可以使用一些原始SQL(通过存储过程访问,但我真的,真的,真的更喜欢Linq2SQL)。

(作为奖励,我的下一步很可能是通过过滤其他一些元数据来确定应包括哪些会话)

希望聪明的人会帮助我...

1 个答案:

答案 0 :(得分:1)

我会用这样的东西。

var result = data.OrderBy(x => x.SessionStarted)
    .GroupBy(x => x.IPAddress)
    .Select(x => x.First())
    .GroupBy(x => x.SessionStarted.Date)
    .Select(x => new { Date = x.Key, New = x.Count() });