我有一张类似于此的桌子。我需要选择具有最高年份值和最高月份值的不同供应商编号
VENDORMONTHLY:
id Vendor Year month More stuff(More columns)
---|---------|-------|-------|---------|
1 | 93000 | 2017 | 3 | sadf |
2 | 93000 | 2017 | 2 | asdf |
5 | 93000 | 2017 | 1 | asdf |
3 | 93000 | 2016 | 12 | fff |
4 | 93000 | 2016 | 11 | ffff |
6 | 40000 | 2017 | 2 | fff |
7 | 40000 | 2017 | 1 | fff |
8 | 40000 | 2016 | 12 | fff |
结果看起来像这样。我不能为我的生活提出一个问题,它将给我我需要的东西。
id Vendor Year month More stuff(More columns)
---|---------|-------|-------|---------|
1 | 93000 | 2017 | 3 | sadf |
6 | 40000 | 2017 | 2 | fff |
非常感谢任何帮助!
答案 0 :(得分:2)
如果您正在使用支持窗口功能的某个数据库(SQL Server,Oracle,Postgres等),您可以row_number
(或select *
from (
select v.*,
rank() over (
partition by vendor order by year desc,
month desc
) rn
from vendormonthly v
) v
where rn = 1;
如果每个供应商每年只需要一行组合)
top with ties
在SQL Server中,使用Select top 1 with ties *
From vendormonthly
Order by rank() over (
partition by vendor
order by year desc, month desc
)
:
import seaborn.apionly as sns
答案 1 :(得分:1)
快速回答,使用NOT EXISTS
验证相同的ID没有其他年份或同一年但后一个月的行:
select v1.*
from VENDORMONTHLY v1
where not exists (select 1 from VENDORMONTHLY v2
where v2.Vendor = v1.Vendor
and (v2.Year > v1.year
or (v2.Year = v1.Year and v2.Month > v1.Month)))
如果是最新的行绑定,将返回两行。
核心ANSI SQL-99。将在任何dbms上运行!