MySQL: Select 每行的最高 ID 在另一列上具有相同的值
MySQL: Select the highest ID for every row with the same value on another column
假设我有 2 个相关的 table。第一个名为 a 的列具有以下列:
activityid
subject
date
第二个,名为 b 有这些列
activityid
crmid
activityid
是a和b的关系。
我需要检查重复值,即 table 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)
只能给我整体最高的activityid。
另外,我想删除所有重复项,但那些 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
)
谢谢。
假设我有 2 个相关的 table。第一个名为 a 的列具有以下列:
activityid
subject
date
第二个,名为 b 有这些列
activityid
crmid
activityid
是a和b的关系。
我需要检查重复值,即 table 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)
只能给我整体最高的activityid。
另外,我想删除所有重复项,但那些 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
)
谢谢。