以下为我提供了相关记录的完整列表:
SELECT ID, NAME, STATE, VDATE, COMPLETE_DATE
from db
where NAME NOT IN (SELECT NAME from db where COMPLETE_DATE != '')
ORDER BY NAME, STATE, VDATE DESC;
不幸的是,我对每个名称、州的所有非最新记录(根据 VDATE)感兴趣。基本上,完全相同的结果减去包含最新 VDATE 的每个名称/状态组合的记录。对于每个名称、状态组合,可能有 10 条记录,每条记录的 VDATE 相同或不同。
如何从此数据集中消除最新的 VDATE?
最佳答案
获取每个名称的最大 vdate,声明并在其后使用 not in
。
SELECT ID, NAME, STATE, VDATE, COMPLETE_DATE
from db
where (NAME,STATE,VDATE) NOT IN (SELECT NAME,STATE,MAX(VDATE) as MAXVDT
from db
where COMPLETE_DATE != ''
GROUP BY NAME,STATE)
ORDER BY NAME, STATE, VDATE DESC
或使用连接
与包含每个名称和州的最大日期的派生表。
select d1.ID, d1.NAME, d1.STATE, d1.VDATE, d1.COMPLETE_DATE
from db d1
join (SELECT NAME,STATE,MAX(VDATE) as MAXVDT
from db
where COMPLETE_DATE != ''
GROUP BY NAME,STATE) d2
on d1.name = d2.name and d1.state = d2.state
where d1.vdate <> d2.maxvdt
order by d1.NAME, d1.STATE, d1.VDATE desc
请注意,如果每个名称、状态组合只有一个 vdate,则两个查询都不会在结果中返回这些名称、状态组合,因为该日期将是该组合的 max
vdate .
关于mysql - MYSQL中使用时如何删除最新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353288/