2017-06-02 19 views
-2

私は、このテーブルがあるとします。SQL Serverで範囲の最大の日付の値を取る

| Name  | Date  | 
+-----------+-----------+ 
| Joe  | 1/18/04 | 
| Joe  | 5/08/12 | 
| Joe  | 8/01/15 | 
| Joe  | 4/03/09 |  
| Katie  | 6/7/08 | 
| Katie  | 9/16/16 | 
| Katie  | 4/29/11 | 
| Katie  | 3/30/14 | 

私はこれまで凝縮する必要があります。

| Name  | Date  | 
+-----------+-----------+ 
| Joe  | 8/01/15 | 
| Katie  | 9/16/16 | 

名あたり(つだけのエントリ、および最新のそれぞれの名前の日付)

私が取得することができた最も近いがGROUP BY NameMAX(Date)を使用していたが、それはこのような何かを返しました:

| Name  | Date  | 
+-----------+-----------+ 
| Joe  | 9/16/16 | 
| Katie  | 9/16/16 | 

EDITは:

SELECT name, MAX(date) 
FROM table1 
GROUP BY Name 

EDIT 2:ここに私のクエリの[OK]を、私は愚かな感じ。私の実際のクエリは2つのテーブルを不適切に結合していました。一度私は正しいデータを得ることができたことを固定しました。助けてくれてありがとう。

+5

「9/16/16」を取得するために使用した正確なクエリを表示します。 GROUP BYとMAXを使用すると効果があります。 –

+0

日付列のデータ型とは何ですか? –

+0

日付は日時です –

答えて

-1

この列は、実際には、あなたが言うように、日付の場合は、元のクエリが実際に動作するはずのようなので、それが見えます。おそらくテーブルのその値を持つ行があります。このようなことを確実に実行し、実際に「9/16/16」の「ジョー」を持っているかどうかを調べるために結果を調べます。

SELECT 
    name, 
    date, 
    ROW_NUMBER() OVER(PARTITION BY name ORDER BY date DESC) latestDate 
FROM 
    table1 
ORDER BY name,latestDate 

次に、MAX()を使用するのではなく、この方法で最新のものを探したい場合。これはもっと良い方法だと言っているわけではありません...私はあなたにこれを見る別の方法を提供しています。

WITH CTE_maxDates 
AS 
(
SELECT 
    name, 
    date, 
    ROW_NUMBER() OVER(PARTITION BY name ORDER BY date DESC) latestDate 
FROM 
    table1 
) 
SELECT * FROM CTE_maxDates 
WHERE latestDate = 1 
-1

どのようなクエリを使用していますか?

この問題の場合、このクエリは日付列がデータ型の日付または文字列であると仮定して動作します。

Select Name, Max(Date) from Tablename group by Name. 

さらに、追加の列が競合するかどうかを確認します。

-1

あなたDateはタイプDatetimeである場合、これは動作します(私はそれをテスト)

SELECT [Name], MAX(cast([Date] as date)) AS 'Date' 
FROM "Your table name" 
GROUP BY [Name] 
関連する問題