问题描述
有一个表格,结构如下:
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
并且我只设法获得了我需要删除的值(实际上这很有意义),但我想准确地获得我所做的值无法从该查询中获取。
解决方法
尝试左外连接,如下所示
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;