-1

假设我有 2 个相关的表。第一个名为 a,具有以下列:

activityid
subject
date

第二个,名为 b 有这些列

activityid
crmid

activityid就是 a 和 b 的关系。

我需要检查重复值,即在表 b 上具有相同 crmid 的多个值。使用以下查询:

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。为了更好地解释,如果我有 3 行 crmid = 20 和 4 行 crmid = 21,我想要 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)

只能给我总体上最高的activityid。另外,我想删除所有重复项,但activityid. 执行这些任务的正确查询应该是什么?谢谢任何人。

对于那些想知道它是什么的人,它是 vtigercrm。

4

2 回答 2

0

好的。在玩了 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 回答
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 回答