我有以下SQL語句sql選擇最新值
SELECT [Motor]
,[Time]
FROM [logger].[dbo].[motor]
WHERE day([Time]) = day(getdate())
ORDER BY [TIME]
這是一個非常基本的表,它給出了給定時間電機的狀態。
我想要的只是一個select語句,如果可能的話會給我最新的結果。我可以得到它所以它給出了今天的所有結果但是如果我能得到它以便它只顯示最好的結果。
我有以下SQL語句sql選擇最新值
SELECT [Motor]
,[Time]
FROM [logger].[dbo].[motor]
WHERE day([Time]) = day(getdate())
ORDER BY [TIME]
這是一個非常基本的表,它給出了給定時間電機的狀態。
我想要的只是一個select語句,如果可能的話會給我最新的結果。我可以得到它所以它給出了今天的所有結果但是如果我能得到它以便它只顯示最好的結果。
SELECT TOP(1) [Motor] ,[Time]
FROM [logger].[dbo].[motor]
WHERE day([Time]) = day(getdate())
ORDER BY [TIME] DESC
「只顯示最新結果」 你只用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
的「最新「是TOP 1
和ORDER 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
注意,我選擇保留您的「今天」的語義;如果你有將來的數據,這可能很重要。
我不認爲日(...)完全符合您的想法... – 2011-03-30 09:51:02