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;

ただし、これは日付別ではなく、最新の (?) グループ別snoです。

于 2013-03-15T00:06:31.243 に答える