2011-03-30 57 views
0

我有以下SQL語句sql選擇最新值

SELECT [Motor] 
     ,[Time] 
    FROM [logger].[dbo].[motor] 
    WHERE day([Time]) = day(getdate()) 
    ORDER BY [TIME] 

這是一個非常基本的表,它給出了給定時間電機的狀態。

我想要的只是一個select語句,如果可能的話會給我最新的結果。我可以得到它所以它給出了今天的所有結果但是如果我能得到它以便它只顯示最好的結果。

+2

我不認爲日(...)完全符合您的想法... – 2011-03-30 09:51:02

回答

2
SELECT TOP(1) [Motor] ,[Time] 
FROM [logger].[dbo].[motor] 
WHERE day([Time]) = day(getdate()) 
ORDER BY [TIME] DESC 
5

「只顯示最新結果」 你只用TOP

SELECT TOP (1) [Motor] ,[Time] 
FROM [logger].[dbo].[motor] 
ORDER BY [TIME] desc 

或者(如果你想要的TOP 1 每個電機

WITH cte As 
(
SELECT [Motor] , 
     [Time], 
     ROW_NUMBER() OVER (PARTITION BY [Motor] ORDER BY [TIME] DESC) RN 
FROM [logger].[dbo].[motor] 
) 
SELECT [Motor] ,[Time] 
FROM cte 
WHERE RN=1 
2

的「最新「是TOP 1ORDER BY [x] DESC - 但是,我不認爲查詢是正確的; day返回月份的一天,而不是日期時間的日期只有部分:

DECLARE @today datetime = CAST(FLOOR(CAST(getdate() as float)) as datetime) 
DECLARE @tomorrow datetime = @today + 1 

SELECT TOP 1 [Motor], [Time] 
FROM [logger].[dbo].[motor] 
WHERE [Time] >= @today AND [Time] < @tomorrow 
ORDER BY [Time] DESC 

注意,我選擇保留您的「今天」的語義;如果你有將來的數據,這可能很重要。