2017-03-23 106 views
0

我想做出这样的事情:对于每个国家来说,确定最大发射船数的年份。如果只有一个国家,它会超过一年 - 选择较小。SQL Server数据库 - 如何查询?

有人可以帮我吗?

这是数据库:

enter image description here

enter image description here

输出必须如下:国,船舶的数量,一年

Japan  | 1 | 1913 
USA   | 3 | 1941 
Gt Britain | 6 | 1916 
+1

如果您发布数据和ddl而不是图片,这将容易得多。解决此问题的一种方法的基本要点是使用按国家和年份降序分区的ROW_NUMBER。然后得到那些ROW_NUMBER值为1的人。 –

回答

1
select country, launched, cnt 
from 
(
    select country, launched, cnt, ROW_NUMBER() over (partition by country order by cnt desc, launched asc) as rn 
    from 
    (
     select c.country, s.launched, count(*) as cnt 
     from @classes c 
     inner join @ships s on c.class = s.class 
     group by c.country, s.launched 
    )sq1 
)sq2 where rn = 1 
+0

船的数量在代码输出中不正确:Japan | 1 | 1913 USA | 1 | 1941 Gt英国| 1 | 1916年,所有行中的船舶数量是 - 1,但必须是1,3,6您能修理它吗? –

+0

我的不好 - 修复了选择列 –

+0

非常感谢! –

0

试试这个

;WITH CTE 
AS 
(
SELECT 
    C.Country, 
    S.Launched, 
    ShipCnt = COUNT(1) 
    SeqNo = ROW_NUMBER() OVER(PARTITION BY S.Launched ORDER BY COUNT(1) DESC) 
    FROM Classes C 
     INNER JOIN Ships S 
      ON C.Class = S.Class 
    GROUP BY C.Country,S.Launched 
) 
SELECT * FROM CTE WHERE SeqNo = 1 
+0

您的代码不能正常工作 –