Select SQL Server CE:选择组合最大值和不同值?

Select SQL Server CE:选择组合最大值和不同值?,select,max,sql-server-ce,distinct,Select,Max,Sql Server Ce,Distinct,我对SQL非常陌生。我有一个表,基本上是一组项目的结果表。不同的用户在不同的项目上工作,具有不同的完成日期和级别 以下是表格的布局: tblProjectLog: [plogID] int NOT NULL IDENTITY(1,1) PRIMARY KEY, [projID] int NOT NULL, [userID] int NOT NULL, [presID] int NOT NULL, [plogDateTime] datetime NO

我对SQL非常陌生。我有一个表,基本上是一组项目的结果表。不同的用户在不同的项目上工作,具有不同的完成日期和级别

以下是表格的布局:

tblProjectLog:

    [plogID] int NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    [projID] int NOT NULL, 
    [userID] int NOT NULL, 
    [presID] int NOT NULL, 
    [plogDateTime] datetime NOT NULL, 
    [plogNote] nvarchar(100)
以下是我的初始SQL:

select 
    plog.plogID, plog.userID, plog.projID, plog.presID,  
    u.userFirstName + ' ' + u.userLastName AS [User], 
    proj.projName, pres.presResult, plog.plogDateTime, plog.plogNote 
from 
    tblProjectLog plog 
inner join 
    tblUser u on plog.userID = u.userID 
inner join 
    tblProject proj on plog.projID = proj.projID 
inner join 
    tblProjectResult pres on plog.presID = pres.presID 
order by 
    plog.plogID asc
它返回所有内容(应该返回,因为没有MAX或DISTINCT语句)。所以我得到的是:

plogID    userID    projID    presID    User    projName    presResult    plogDateTime    plogNote
2    1    1    2    John Smith    Birdhouse    Completed    2015-06-13 10:54:45.873    Well done. Sanding needs work.
3    3    1    2    Katie Williams    Birdhouse    Completed    2015-06-13 13:55:54.813    Excellent staining with solid work.
4    2    7    1    John Thomas    Step Ladder    In Progress    2015-06-13 15:57:20.593    going along well
5    6    2    3    Diane Stevens    Chessboard    Withdrawn    2015-06-13 16:57:57.393    leaving town for 2 weeks. will start new when she returns.
6    7    4    1    Lia McKenzie    Lamp    In Progress    2015-06-13 17:36:39.183    Working on electical routing
7    8    5    1    Stephanie Drake    Toolbox 1    In Progress    2015-06-14 11:41:27.907    solid starting work
8    7    4    1    Lia McKenzie    Lamp    In Progress    2015-06-14 11:52:25.923    finished sanding. first day of stain.
9    9    3    1    Cheryl Lor    Step Stool    In Progress    2015-06-14 11:59:30.113    Learning to use a table saw. Nice start.
10    2    7    2    John Thomas    Step Ladder    Completed    2015-06-15 11:20:51.737    good finished project.
11    7    4    2    Lia McKenzie    Lamp    Completed    2015-06-15 11:21:31.723    Excellent work.
12    2    1    1    John Thomas    Birdhouse    In Progress    2015-06-15 13:08:53.407    starting complicated birdhouse design
清理它以使其更易于阅读(删除ID字段(plogID除外,plogID是
tblProjectLog
上的主键)和其他字段)为我们提供了以下信息:

2 | John Smith | Birdhouse | Completed 
3 | Katie Williams | Birdhouse | Completed
4 | John Thomas | Step Ladder | In Progress
5 | Diane Stevens | Chessboard | Withdrawn
6 | Lia McKenzie | Lamp | In Progress
7 | Stephanie Drake | Toolbox | In Progress
8 | Lia McKenzie | Lamp | In Progress
9 | Cheryl Lor | Step Stool | In Progress
10 | John Thomas | Step Ladder | Completed
11 | Lia McKenzie | Lamp | Completed
12 | John Thomas | Birdhouse | In Progress
我想得到的是:

2 | John Smith | Birdhouse | Completed 
3 | Katie Williams | Birdhouse | Completed
5 | Diane Stevens | Chessboard | Withdrawn
7 | Stephanie Drake | Toolbox | In Progress
9 | Cheryl Lor | Step Stool | In Progress
11 | Lia McKenzie | Lamp | Completed
12 | John Thomas | Birdhouse | In Progress
但是,当我尝试添加MAX(plog.plogID)时,会出现以下错误:

错误代码:-2147467259[SQL Server Compact ADO.NET数据提供程序] HResult:-2147217900,国家错误:25518错误消息:总计 和分组表达式,ORDER BY子句只能包含 聚合函数和分组表达式

当我在plog.userID字段中添加一个独特的标记时,我得到一个令牌错误

有谁能帮助我尝试通过每个用户ID只获取最近的条目,并且每个用户ID只获取一个条目?是否需要MAX和DISTINCT,或者sql noobie是否有其他方法来完成此任务


哦,我忘了提到它是SQL Server CE。感谢您提供的任何帮助。

另一个网站上的一位用户为我发布了一个非常有效的答案。我想给用户(和网站)评分,但我不确定关于发布其他网站和/或其用户的规则

这是他发布的sql语句,它提供了我想要的东西。希望这将有助于其他人,如果他们正在寻找类似的东西,我一直在寻找

select plog.plogID, plog.userID, plog.projID, plog.presID, 
     u.userFirstName + ' ' + u.userLastName AS [User], 
    proj.projName, pres.presResult, plog.plogDateTime, plog.plogNote
from tblProjectLog plog 
inner join tblUser u on plog.userID = u.userID 
inner join tblProject proj on plog.projID = proj.projID 
inner join tblProjectResult pres on plog.presID = pres.presID 
inner join
    (SELECT MAX(plog.plogID) as m_plogID        
    FROM tblProjectLog plog 
    GROUP BY plog.userID
    ) M
    ON m_plogID = plog.plogID
order by plog.plogID asc
希望这有帮助。:)