2017-06-02 83 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 | 

有什麼建議嗎?

編輯:這是我的查詢:

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

編輯2:好了,我覺得愚蠢。我的實際查詢是不正確地加入兩個表。一旦我確定我能夠獲得正確的數據。謝謝您的幫助。

+5

顯示您用來爲兩者獲取'9/16/16'的確切查詢。使用GROUP BY和MAX應該可行。 –

+0

日期列的數據類型是什麼? –

+0

日期是日期時間 –

回答

-1

所以它看起來像你的原始查詢應實際工作中如果此列,其實,日期如你所說。你可能在表格中有一行這個值。爲了確保運行這樣的東西,並篩選結果,看看你是否確實有'9/16/16'的'Joe'。

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

這工作,如果你的DateDatetime類型(我測試)

SELECT [Name], MAX(cast([Date] as date)) AS 'Date' 
FROM "Your table name" 
GROUP BY [Name]