SQL oracle具有连接表和Max函数

时间:2016-08-19 16:47:08

标签: sql oracle

请帮忙吗?只是一个菜鸟在这里开始学习如何编写SQL并遇到这个问题。我知道如何使用MAX函数,但我无法弄清楚如何将所有这些要求结合在一起。我有两个表,AccountsBooks(下面是数据示例)

Accounts                                       
ID Series   YesorNot    Dated Filed     Plan Year       
1   123     Yes         06/12/2015      2015        
2   123     No          06/12/2015      2015        
3   145     Yes         06/06/2015      2015
4   145     No          02/02/2015      2014        
5   198     Yes         02/03/2015      2015        
6   187     Yes         02/14/2013      2013            
7   153     Yes         01/02/2011      2011        

Books       
Primary Key Date Created    ID
1           06/13/2015      123
2           06/12/2015      123
3           06/07/2015      145
4           02/02/2015      145
5           02/03/2015      198

两个表:AccountsBooks
寻找:
1.项目ID =主键的两个表中存在的数据 我只想要一个unqiue系列(系列也= ID)
3.我想要计划年度的MAX(最近)值,然后如果计划年度有重复项,我需要创建日期的MAX(最近)值。
4.我只需要列Project IDSeriesYesorNotDate FiledPlan Year,因此我的输出应该是这样的:

Project ID  Series  YesorNot  Dated Filed Plan Year     
1           123     Yes       06/12/2015  2015          
3           145     Yes       06/06/2015  2015          
4           145     No        02/02/2015  2014          
5           198     Yes       02/03/2015  2015  

1 个答案:

答案 0 :(得分:0)

首先加入表格:

SELECT B.Primary_Key as Project_ID, A.Series, A.YesorNot, A.Date_Filed, A.Plan_Year
FROM Books B
JOIN Accounts A ON B.ID = A.Series

你应该能够自己解决这个问题(你应该把它作为问题的一部分发布) - 如果你不能,我会说找到一个不同的职业。假设你现在可以稍微努力一点。

现在我们根据您的标准添加行号

ROW_NUMBER() PARTITION BY (B.Primary_Key, A.Series, A.YesorNot, A.Date_Filed ORDER BY A.Date_Year DESC, B.Date_Created DESC) AS RN

现在只取第一行号。

SELECT Project_ID, Series, YesorNot, Date_Filed, Plan_Year
FROM (
  SELECT B.Primary_Key as Project_ID, A.Series, A.YesorNot, A.Date_Filed, A.Plan_Year,
         ROW_NUMBER() PARTITION BY (B.Primary_Key, A.Series, A.YesorNot, A.Date_Filed ORDER BY A.Date_Year DESC, B.Date_Created DESC) AS RN
  FROM Books B
  JOIN Accounts A ON B.ID = A.Series
) X
WHERE RN = 1