通过选择使用组表最后一个记录[复制]

问题描述 投票:-1回答:2

这个问题已经在这里有一个答案:

我需要选择使用组通过用户名从我的表最后一个记录

Image

我需要从用户ID分组最后一个记录选择开始日期,结束日期

我使用下面的代码

select StartDate,EndDate from  usersworktime   group by userid,StartDate,EndDate

问题是,我得到而不是只有最后两个我的表中的所有行

sql sql-server sql-server-2008-r2
2个回答
2
投票

假设开始和结束日期将永远是最高值,则需要放弃一些列从GROUP BY(其在GROUP BY所有列是有点像使用DISTINCT)和另一列使用聚合函数:

SELECT UserId,
       MAX(StartDate) AS StartDate,
       MAX(EndDate) AS EndDate
FROM usersworktime
GROUP BY UserId;

否则,如果不是的话,你可以用一个CTE和ROW_NUMBER

WITH CTE AS(
    SELECT UserID,
           StartDate,
           EndDate,
           ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY UsersWordTimeID DESC) AS RN
    FROM usersworktime)
SELECT UserID,
       StartDate,
       EndDate
FROM CTE
WHERE RN = 1;

0
投票

我想我找到了解决办法

SELECT usersworktimeid, userid,StartDate, EndDate
  FROM usersworktime
WHERE usersworktimeid IN (
SELECT MAX(usersworktimeid)
FROM usersworktime
GROUP BY UserID
);
© www.soinside.com 2019 - 2024. All rights reserved.