SQL 中的条件选择

问题描述 投票:0回答:2

假设我们有下表:

A       B        C      Year
-----   ----    ----    -----
ABC     Val1   Val2     2015 
ABC     Val3   Val4     2016
ABC     Val6   Val7     2017 
ABC     Val8   Val9     2018
XYZ     Val10  Val9     2016 
XYZ     Val3   Val4     2017
WRD     Val1   Val2     2015
WRD     Va2    Val9     2017
----------------------------

可以看到A列和Year的关系是1:n 问题:我不明白,考虑以下条件,如何编写一个 SQL 查询来打印 A、B、C 和 D 列的值:

如果 A 列对应的年份是 2018,则打印该行 (A,B,C,Year),否则打印 max(year) 的行。

这意味着答案应该如下:

A       B        C      Year
-----   ----    ----    -----
ABC     Val8   Val9     2018
XYZ     Val3   Val4     2017
WRD     Va2    Val9     2017

提前非常感谢

sql greatest-n-per-group
2个回答
1
投票

您的样本数据表明:

select t.*
from table t
where year = (select max(t1.year) from table t1 where t1.a = t.a);

1
投票

为了完整起见,我假设您的数据可能包含> 2018年的日期,而您仍然想选择2018年;在这种情况下:

SELECT *
FROM testdata
WHERE Year = (
  SELECT COALESCE(MAX(CASE WHEN Year = 2018 THEN Year END), MAX(Year))
  FROM testdata t1
  WHERE A = testdata.A
)
© www.soinside.com 2019 - 2024. All rights reserved.