1

MS-SQL を使用しており、次の列を持つテーブルがあります。

セッション ID | 日付 | ファーストネーム | 姓 セッション ID でグループ化し、最大日付の行を取得したいと考えています。それに加えて、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

ありがとう。

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 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 に答える
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 に答える