1

私は3つのテーブルを持っています:

表1-メンバー

Id   Name
1    Member1
2    Member2

表2-アクティビティ

Id   Member_id   Activity    Date
 1      1        Activity1   2001-1-1
 2      1        Activity2   2001-2-1
 3      1        Activity3   2001-3-1
 4      2        Test        2010-4-1

表3–詳細

Id  Activity_id Information
1   2       Information

以下から、メンバーID1には3つのアクティビティがあります。

SELECT Member.id, COUNT(*) AS number
FROM Member 
INNER JOIN Activity ON Activity.Member_ID = Member.id
GROUP BY Member.id

私の質問は、2つのアクティビティを持つテーブル(1)からすべてのメンバーの2番目のアクティビティ(テーブル2)のIDと日付を検索し、このアクティビティIDに関連する情報をテーブル3から取得する方法です。

前もって感謝します

4

2 に答える 2

1

行番号関数はここで役立ちます。

select *
from (
    select 
        *,
        rn = row_number() over (partition by member_id order by id)
    from
        activity
) activityWithRn
inner join detailed on detailed.activity_id = activityWithRn.id
where activityWithRn.rn = 2

ここでは、データをメンバーIDで分割し、アクティビティをそのIDで並べ替えましたが、日付で並べ替えたい場合がありますか?

于 2012-05-17T19:36:03.183 に答える
0

@moutersに同意します。このROW_NUMBER()関数は、ここで実際に役立ちます。しかし、ランキングは@moutersが提案した方法とは少し異なる方法で使用する必要があると思います。

これが私の解決策の試みです:

WITH ranked AS (
  SELECT
    *,
    rn = ROW_NUMBER() OVER (PARTITION BY Member_id)
  FROM Activity
)
SELECT
  a.Member_id,
  number      = COUNT(*),
  Activity_id = MAX(d.Activity_id),
  Information = MAX(d.Information)
  Date        = MAX(CASE WHEN d.Id IS NOT NULL THEN a.Date)
FROM ranked a
  LEFT JOIN Detailed d ON a.Id = d.Activity_id AND a.rn = 2
GROUP BY a.Member_id
于 2012-05-17T20:42:45.490 に答える