2013-11-20 55 views
0

我有一個包含DateTime和Value列的表。我需要從最後一天(最新)一天中選擇最大值。我能想出的最好的是3個步驟:SQL select最後一天的MAX值

  1. SELECT MAX(DateTime) FROM MyTable
  2. 擺脫日期時間時間部分,存儲日期
  3. SELECT MAX(Value) FROM MyTable WHERE DateTime>date

的有沒有更好的方式來做到這一點?

+1

您使用的是什麼rdbms? –

+0

我使用火鳥。 –

+1

@FreshPrinceOfSO檢查標記 –

回答

2

在一個查詢你的三個步驟將

SELECT MAX(Value) 
FROM MyTable 
WHERE DateTime >= CAST((SELECT MAX(DateTime)FROM MyTable) AS DATE) 

現在發現的最大日期可能是相當昂貴的查詢,所以如果你昨天的最高值後,實際上是,那麼你應該使用CURRENT_DATE相反,即

WHERE DateTime >= (CURRENT_DATE - 1) AND DateTime < CURRENT_DATE 
+0

該條件還將選擇今天(或明天)的字段。 –

+0

由於我們選擇最大日期,因此不會有「明天的記錄」。但是CURRENT_DATE的查詢需要修復,那就對了。 – ain

+0

謝謝@ain! CAST的訣竅是我一直在尋找的。 –

0

你可以這樣做嗎?

SELECT MAX(Value) 
FROM MyTable 
WHERE DateTime IN (
    SELECT MAX(DateTime) 
    FROM MyTable 
) 
+0

我想他想要昨天的最後價值(_「來自最後一天」)。 –

+0

如果最後一天有幾個值會發生什麼? –

+0

@OtoZars:應該選擇最後一天的最大值。 – voithos

1

如果你的意思今天的最高值,那麼你可以使用:

SELECT MAX(value) 
FROM MyTable 
WHERE CAST(DateTime AS DATE) = CURRENT_DATE 
+0

也許我還不夠清楚。我不是說今天的最高價值。我的意思是全天最高值和最高日期時間。那一天可能是今天,那一天可能是昨天,也可能是上週的一天。 –