none
请问:取出每组中的第一条记录怎么写? RRS feed

  • 问题

  • -- 操作日志表
    CREATE TABLE JobLog  -- 操作日志表
    (
         JobLogId]
    int NOT NULL ,       -- 主键
         FunctionId nvarchar(20) NULL , -- 功能Id
         OperateTime datetime NULL      -- 操作时间
    ) ON PRIMARY
    GO
    ALTER TABLE JobLog ADD
    CONSTRAINT PK_JobLog PRIMARY KEY CLUSTERED(JobLogId) ON PRIMARY
    GO

    -- 操作日志表的所有记录
    SELECT * FROM JobLog
    查询结果:
    1    001    2007-11-01
    2    001    2007-11-02
    3    001    2007-11-03
    4    002    2007-11-04
    5    002    2007-11-05
    6    003    2007-11-06
    7    004    2007-11-07
    8    004    2007-11-08
    9    005    2007-11-09
    10  005    2007-11-10

    -- 每个功能最后一次操作记录
    SELECT * FROM JobLog A
    WHERE JobLogId in
            (
    SELECT TOP 1 JobLogId FROM JobLog
             
    WHERE A.FunctionId = FunctionId ORDER BY OperateTime DESC
            )
    查询结果:
    3    001    2007-11-03
    5    002    2007-11-05
    6    003    2007-11-06
    8    004    2007-11-08
    10  005    2007-11-10

     

    还有一种写法:

    SELECT * FROM JobLog A
    EXISTS
    ( select JobLogId in from JobLog
       where JobLog.FunctionId=A.FunctionId and JobLog.JobLogId <A.JobLogId
    )

    select   *   from   tb   where   JobLogId   in   (select   min(JobLogId)   from   tb   group   by   FunctionId);

    ======================================================

    以上为SQL写法,请问在linq中应当怎么写呢?

    2010年9月4日 11:45

答案

  • 您好:

    根据你的要求

    var list = (from c in Context.JobLog
                   where c.FunctionId == FunctionId 
                   orderby c.OperateTime
                   select c).Take(1);

    希望对你有帮助

    2010年9月15日 4:10