0

人の重複をどのように排除できますか。

SELECT Persons.Id, Activity.Activity, Activity.Description, Activity.StartDate, Activity.EndDate
FROM Activity
INNER JOIN Login_Activity ON Activity.ActivityId = Login_Activity.ActivityId
INNER JOIN Persons ON Login_Activity.LoginId = Persons.LoginId
AND Activity.Description IS NOT NULL ORDER BY Persons.Id DESC


Person 1 - Activity 1
Person 1 - Activity 2
Person 2 - Activity 1
Person 3 - Activity 2
Person 3 - Activity 3

編集: この結果が欲しいです。

Person 1 - Activity 1
Person 2 - Activity 1
Person 3 - Activity 3

アクティビティテーブルにはいくつかの時刻表も含まれているため、すべてのアクティビティの最後の日時のみが必要です。その問題については、ORDER DESC 関数を使用するだけです。しかし、重複を排除する必要もあります。

EDIT2:SQLクエリを使用して最大値をソートし、PHP配列を使用して人物を1回だけ表示する場合。

mainArray = array(

 'person' => '1', 'Activity' => 'abc', 

'person' => '1', 'Activity' => 'cba',

'person' => '2', 'Activity' => 'abc',

'person' => '2', 'Activity' => 'cba',

'person' => '3', 'Activity' => 'cba'

);
4

2 に答える 2

0

各ユーザーに必要な最新の (またはその他の) ログイン アクティビティを識別する中間サブクエリが必要です。整数の自動インクリメント フィールドであるLogin_Activityというフィールドがあると仮定すると、これは機能します。LoginActivityID

SELECT
    P.Id, 
    A.Activity, 
    A.Description, 
    A.StartDate, 
    A.EndDate
FROM
    Persons P
            INNER JOIN
    (
        SELECT  LA2.LoginId, MAX(LA2.LoginActivityID) LoginActivityID
        FROM    Login_Activity LA2
                        INNER JOIN
                Activity A2
        WHERE   A2.Description IS NOT NULL
        GROUP BY LA2.LoginId
    ) LAX
            ON
        P.LoginId = LAX.LoginId
            INNER JOIN
    Login_Activity LA
            ON
        LAX.LoginActivityID = LA.LoginActivityID
            INNER JOIN
    Activity A
            ON
        LA.ActivityID = A.ActivityID
于 2013-06-15T17:36:17.757 に答える