3

我有以下 SQL Server 表

我想要下表中最新的所有前 4 个不同代码
请记住,我希望返回所有列,而不仅仅是代码列。

sno  city      state  country  code  date
1    new york  NY      US      1234  1/1/2013
2    Houston   TX      US      2234  1/6/2013 
3    LA        CA      US      1123  1/2/2013
4    Chicago   IL      US      1244  1/3/2013
5    Brooklyn  NY      US      1234  1/4/2013
6    Dallas    TX      US      2234  1/5/2013

我的以下选择查询返回重复代码,但我想要不同的最新代码。

select top 4 * from table1 where code in (select distinct code from table1) 

任何帮助是极大的赞赏。

4

2 回答 2

8
WITH topList
AS
(
    SELECT  sno, city, state, country, code, date,
            ROW_NUMBER() OVER(PARTITION BY code ORDER BY DATE DESC) rn
    FROM    TableName
)
SELECT  TOP 4 sno, city, state, country, code, date
FROM    topList
WHERE   rn = 1
ORDER   BY DATE DESC

输出

╔═════╦══════════╦═══════╦═════════╦══════╦════════════╗
║ SNO ║   CITY   ║ STATE ║ COUNTRY ║ CODE ║    DATE    ║
╠═════╬══════════╬═══════╬═════════╬══════╬════════════╣
║   2 ║ Houston  ║ TX    ║ US      ║ 2234 ║ 1/6/2013   ║
║   5 ║ Brooklyn ║ NY    ║ US      ║ 1234 ║ 1/4/2013   ║
║   4 ║ Chicago  ║ IL    ║ US      ║ 1244 ║ 1/3/2013   ║
║   3 ║ LA       ║ CA    ║ US      ║ 1123 ║ 1/2/2013   ║
╚═════╩══════════╩═══════╩═════════╩══════╩════════════╝
于 2013-03-15T00:02:48.217 回答
2

这很简单GROUP BY

SELECT TOP 4 * FROM table1
WHERE sno IN (SELECT MAX(sno) FROM table1 GROUP BY code)
ORDER BY date DESC;

虽然,这是最近的 (?) group by sno,而不是 date。

于 2013-03-15T00:06:31.243 回答