MySQL:为另一列上具有相同值的每一行选择最高ID

MySQL:为另一列上具有相同值的每一行选择最高ID,mysql,select,vtigercrm,Mysql,Select,Vtigercrm,假设我有两个相关的表。第一列名为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

假设我有两个相关的表。第一列名为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
我可以成功地得到所有这些。现在,我想获得在具有相同crmid的值之间具有最高activityid的所有值。为了更好地解释,如果我有3行crmid=20,4行crmid=21,我需要crm=20的最高activityid,也需要crmid=21的最高activityid。 以下是:

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。

试试这个:

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

嗯。在使用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
)

谢谢。

从vtiger\u活动中选择y.activityid,从vtiger\u活动中选择y.subject,从vtiger\u活动中选择MAXa.activityid作为活动ID,从vtiger\u活动中选择a.crmid作为活动ID,从vtiger\u活动中选择b,其中a.crmid=b.crmid=和a.activityid!=b、 activityid GROUP BY a.crmid z ON y.activityid=z.activityid这很有效,不过我需要仔细阅读才能理解您所做的!现在,我将尝试删除所有这些2See@草莓,因为没有提供示例数据集?因为否则…谢谢你的提示。