请帮忙吗?只是一个菜鸟在这里开始学习如何编写SQL并遇到这个问题。我知道如何使用MAX
函数,但我无法弄清楚如何将所有这些要求结合在一起。我有两个表,Accounts
和Books
(下面是数据示例)
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
两个表:Accounts
和Books
寻找:
1.项目ID =主键的两个表中存在的数据
我只想要一个unqiue系列(系列也= ID)
3.我想要计划年度的MAX
(最近)值,然后如果计划年度有重复项,我需要创建日期的MAX
(最近)值。
4.我只需要列Project ID
,Series
,YesorNot
,Date Filed
,Plan 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
答案 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