SQL中的条件选择

时间:2018-07-27 13:05:13

标签: sql greatest-n-per-group

假设我们有下表:

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的色散值的SQL查询: 如果列A的相应年份是2018,则打印该行(A,B,C,Year),否则打印max(year)行。这意味着answear应该是以下内容:

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

非常感谢

2 个答案:

答案 0 :(得分:1)

您的样本数据表明:

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

答案 1 :(得分: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
)