mysql - MYSQL中使用时如何删除最新的

标签 mysql sql

以下为我提供了相关记录的完整列表:

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/

相关文章:

mysql - mysql中数字的反转

javascript - 函数在 Node.js 中被多次调用

java - 从另一台计算机访问mysql数据库服务器?

mysql - Sphinx 搜索或 MySQL 庞大的数据库搜索引擎

mysql - 如何漂亮地打印 Hive 输出

java - 使用 Hibernate Criteria 查询 ManyToMany 关系

MySQL 返回 Where 范围外的值,计数为 0

mysql - SQL查询获取每个类别的产品数量

sql - Oracle中如何选择两列作为一列进行比较

sql - 使用 Postgres 对 varchar 列中的结果进行排序