0

データベースクエリ用のSQLコマンドを作成するのに助けが必要です。データベースには5つの列があります。

Date(string) 
Name(string) 
number(int)

日付、名前、番号ごとに複数のエントリが存在する可能性があります。

日付と名前の組み合わせごとに1行だけを選択したいと思います。問題は、これらのインスタンスが複数あることです。日付と名前の組み合わせごとに、番号が最も大きいものを選択します。日付順に並べて欲しいのですが。例えば:

date   |  name  |  number
1/1/1     henry      500
1/1/1     henry      2000 
1/1/1     jacob      5
1/1/1     jacob      8
1/2/1     henry      6

コマンドは次を返します。

1/1/1     henry     2000
1/1/1     jacob     8 
1/2/1     henry     6   

私はいくつかのコマンドをいじっていますが、私はかなり迷っています。これも可能ですか?

4

3 に答える 3

2

あなたが使用することができますROW_NUMBER

WITH cte 
     AS (SELECT date, 
                name, 
                number, 
                rn = Row_number () 
                       OVER( 
                         partition BY date, name 
                         ORDER BY number DESC) 
         FROM   dbo.tablename) 
SELECT date, 
       name, 
       number 
FROM CTE
WHERE  rn = 1 
ORDER  BY date ASC

デモ

ROW_NUMBERグループごとに常に1つのレコードを選択します。指定された名前(複数ある場合)の番号が最も大きいすべての行を取得する場合は、DENSE_RANK代わりに使用します。

于 2013-03-18T22:05:50.590 に答える
0

日付と名前でグループ化してから、最大数を選択してみてください。そのように(正確な構文はSQLのバージョンによって異なる場合があります):

select
   date,
   name,
   max(number)
from
   yourtable
group by
   date,
   name
order by
   date asc
于 2013-03-18T22:09:34.280 に答える
0
SELECT date, name, MAX(number)
FROM Table1
GROUP BY date, name
ORDER date, name
于 2013-03-18T22:10:56.233 に答える