从表中选择除 SELECTION 之外的所有内容 - MySQL

问题描述

一个表格,结构如下:

id foo created_at month_year
1 A 10 7/7/1999 jan2020
2 B 20 7/7/1999 jan2020
3 C 30 7/7/1999 jan2020
4 A 40 7/7/1999 jan2021
5 A 50 7/7/2000 jan2021
6 A 60 7/7/2000 2021 年 2 月

我曾经运行过这样的查询

delete ns
from foo ns
inner join 
(
    select month_year,max(nsa.created_at) created_at
    from foo nsa 
    group by month_year
) 
ns1 on ns1.month_year = ns.month_year and ns1.created_at <> ns.created_at;

查询的想法是它用于根据唯一的 created_at 删除最后 month_year 的值。无论如何,它以我想要的方式工作。

问题:

我需要什么 - 不删除,以获取未从该查询删除的值。试图用 delete 替换 select 并且我只设法获得了我需要删除的值(实际上这很有意义),但我想准确地获得我所做的值无法从该查询获取

(随意将标题编辑为在 sql 中更有意义的内容

解决方法

尝试左外连接,如下所示

select ns.*
from foo ns
left outer join 
(
   select month_year,max(nsa.created_at) created_at
   from foo nsa 
   group by month_year
 ) 
ns1 on ns1.month_year = ns.month_year and ns1.created_at <> 
ns.created_at
where ns1.month_year IS NULL;