3

バスと学生の登録情報を含むテーブルがあります。

CREATE TABLE [dbo].[BusSignupInstance](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [StudentId] [int] NOT NULL,
    [BusId] [int] NOT NULL
) ON [PRIMARY]

サンプルデータは次のとおりです。

Id  StudentId   BusId
1   1   1
2   2   1
3   3   1
4   1   2
5   4   2
6   1   3
7   5   3

バスID別の総数が欲しいのですが。この場合、次のようになります。

BusId    Num of Students
1      2 (student id 2, 3)
2      1 (student id 4)
3      2 (student id 1, 5)

結果はサインアップの順序に基づいており、学生1が3回サインアップした場合、最後の時間のみが有効になります。

4

1 に答える 1

6
SELECT  busId, COUNT(*)
FROM    (
        SELECT  busId, studentId,
                ROW_NUMBER() OVER (PARTITION BY studentId ORDER BY id DESC) rn
        FROM    busSignupInstance
        ) q
WHERE   rn = 1
GROUP BY
        busId
于 2012-05-23T19:58:07.167 に答える