我正在使用MS-SQL,我有一个包含以下列的表:
SessionId |日期|名字|姓 我想按sessionId进行分组,然后获取具有最大日期的行。 除此之外,我想计算sessionsId。
例如:
xxx | 21/12/2012 | f1 | l1
xxx | 20/12/2012 | f2 | l2
yyy | 21/12/2012 | f3 | l3
yyy | 20/12/2012 | f4 | l4
我想获得以下行:
xxx | 21/12/2012 | f1 | l1 | 2
yyy | 21/12/2012 | f3 | l3 | 2
感谢。
答案 0 :(得分:2)
试试这个:
SELECT
s.SessionId,
s.Date,
s.firstname,
s.lastname,
m.SessionsCount
FROM Sessions s
INNER JOIN
(
SELECT SessionID, COUNT(SessionID) AS SessionsCount, MAX(Date) LatestDate
FROM sessions
GROUP BY SessionID
) m ON m.SessionID = s.SessionID
AND m.LatestDate = s.Date;
这会给你:
| SESSIONID | DATE | FIRSTNAME | LASTNAME | SESSIONSCOUNT |
-----------------------------------------------------------------
| xxx | 21/12/2012 | f1 | l1 | 2 |
| yyy | 21/12/2012 | f3 | l3 | 2 |
答案 1 :(得分:0)
这就是这样做,
select a.date1,a.first_name,a.last_name
from(select row_number()
over(partition by SessionId order by SessionId) rnk,date1,first_name,last_name
from table1) a where a.rnk=1
示例答案:
DATE1 FIRST_NAME LAST_NAME
21/12/2012 f1 l1
21/12/2012 f3 l3
答案 2 :(得分:0)
试试这个:
SELECT sessionid, a.date, firstname, lastname, COUNT(sessionid) sessioncnt
FROM (SELECT * FROM sessions ORDER BY sessionid, date DESC) AS a
GROUP BY sessionid;