假设我们有下表:
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
提前非常感谢
您的样本数据表明:
select t.*
from table t
where year = (select max(t1.year) from table t1 where t1.a = t.a);
为了完整起见,我假设您的数据可能包含> 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
)