带有计数的SQL查询

时间:2013-01-01 15:16:43

标签: sql sql-server group-by

我正在使用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

感谢。

3 个答案:

答案 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;

SQL Fiddle Demo

这会给你:

| 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

Live Demo

答案 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;