1

我正在使用 MS-SQL,并且我有一个包含以下列的表:

会话 ID | 日期 | 名字 | 姓氏我想按 sessionId 分组,然后获取最大日期的行。除此之外,我想计算sessionId。

例如:

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

谢谢。

4

3 回答 3

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;

SQL 小提琴演示

这会给你:

| SESSIONID |       DATE | FIRSTNAME | LASTNAME | SESSIONSCOUNT |
-----------------------------------------------------------------
|       xxx | 21/12/2012 |        f1 |       l1 |             2 |
|       yyy | 21/12/2012 |        f3 |       l3 |             2 |
于 2013-01-01T15:18:27.807 回答
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

现场演示

于 2013-01-01T15:30:25.190 回答
0

尝试这个:

SELECT sessionid, a.date, firstname, lastname, COUNT(sessionid) sessioncnt 
FROM (SELECT * FROM sessions ORDER BY sessionid, date DESC) AS a 
GROUP BY sessionid;
于 2013-01-01T15:40:35.273 回答