-1

2 つの関連テーブルがあるとします。a という名前の最初のものには、次の列があります。

activityid
subject
date

b という名前の 2 番目のものには、これらの列があります

activityid
crmid

activityidは、a と b を関連付けるものです。

テーブルで同じ crmid を持つ複数の値である重複値をチェックする必要があります b. 次のクエリを使用します。

SELECT y.activityid, y.subject 
FROM vtiger_activity y 
INNER JOIN (SELECT DISTINCT a.activityid, a.crmid 
            FROM vtiger_seactivityrel a, vtiger_seactivityrel b 
            WHERE a.crmid = b.crmid 
            AND a.activityid != b.activityid) z 
ON y.activityid = z.activityid

これらすべてを正常に取得できます。今activityid、同じcrmid. より詳しく説明すると、crmid = 20 の 3 行と crmid = 21 の 4 行がある場合、crm = 20 の最高のアクティビティ ID だけでなく、crmid = 21 の最高のアクティビティ ID も必要です。以下:

SELECT y.activityid, y.subject 
FROM vtiger_activity y 
INNER JOIN (SELECT DISTINCT a.activityid, a.crmid 
            FROM vtiger_seactivityrel a, vtiger_seactivityrel b 
            WHERE a.crmid = b.crmid 
            AND a.activityid != b.activityid) z 
ON y.activityid = z.activityid 
WHERE y.activityid = (SELECT MAX(activityid) 
                        FROM (SELECT y.activityid, y.subject 
                            FROM vtiger_activity y 
                            INNER JOIN (SELECT DISTINCT a.activityid, a.crmid 
                                        FROM vtiger_seactivityrel a, vtiger_seactivityrel b 
                                        WHERE a.crmid = b.crmid AND a.activityid != b.activityid) z 
                            ON y.activityid = z.activityid) t)

全体的に最高のアクティビティIDしか提供できません。さらに、すべての重複を削除したいのですが、最も高いactivityid. これらのタスクを実行するための適切なクエリは何ですか? 誰にでも感謝します。

何だろうと思っている人は、vtigercrm です。

4

2 に答える 2

0

これを試して:

SELECT y.activityid, y.subject 
FROM vtiger_activity y 
INNER JOIN (SELECT DISTINCT a.activityid, a.crmid 
        FROM vtiger_seactivityrel a, vtiger_seactivityrel b 
        WHERE a.crmid = b.crmid 
        AND a.activityid != b.activityid) z 
ON y.activityid = z.activityid 
INNER JOIN (
  SELECT m.crmid,MAX(m.activityid) AS activityid 
  FROM ivtiger_seactivityrel m 
  GROUP BY m.crmid) ma
ON ma.activityid=y.activityid
于 2016-11-01T21:00:51.077 に答える
0

Ok。PeterHe のソリューションで遊んだ後、これらの値以外をすべて削除するソリューションを見つけました。

DELETE vtiger_activity.*, vtiger_seactivityrel.*
FROM vtiger_activity
INNER JOIN vtiger_seactivityrel
ON vtiger_activity.activityid = vtiger_seactivityrel.activityid
WHERE vtiger_activity.activityid NOT IN (
    SELECT activityid FROM(
        SELECT m.crmid,MAX(m.activityid) AS activityid 
        FROM vtiger_seactivityrel m 
        GROUP BY m.crmid
    ) z
)

ありがとう。

于 2016-11-01T21:34:34.147 に答える