我在SQL Server 2014中有一張帶時間戳的表。從SQL Server表中比較日期時間和用戶的日期時間,並從表格中獲取最接近用戶日期時間的日期
這是我的表:
我想每個時間戳從我的表與一個時間戳,我輸入比較,並從我的表中獲取的時間戳爲其datediff(table_timeStamp, @myTimestamp)
最小。希望清楚我想要什麼。這是一個功能,我想知道如何以最簡單的方式做到這一點?
我在SQL Server 2014中有一張帶時間戳的表。從SQL Server表中比較日期時間和用戶的日期時間,並從表格中獲取最接近用戶日期時間的日期
這是我的表:
我想每個時間戳從我的表與一個時間戳,我輸入比較,並從我的表中獲取的時間戳爲其datediff(table_timeStamp, @myTimestamp)
最小。希望清楚我想要什麼。這是一個功能,我想知道如何以最簡單的方式做到這一點?
SELECT TOP 1 * ........... order by ABS(datediff(second,table_timeStamp, @myTimestamp))
如果表的Time_Stamp
列有索引,則該查詢的工作速度會快得多。 winner
查詢將始終執行表掃描和NEWER使用索引。
SELECT TOP 1 Time_Stamp FROM
SELECT Max(Time_Stamp) as Time_Stamp FROM MyTable WHERE Time_Stamp < @myTimestamp
UNION
SELECT MIN(Time_Stamp) as Time_Stamp FROM MyTable WHERE Time_Stamp > @myTimestamp)
ORDER BY 1
雖然這段代碼可能有助於解決問題,提供 附加上下文關於_why_和/或_how_它回答 該問題將顯着提高其長期值 值。請[編輯]你的答案,添加一些解釋。 –
這很簡單。如果在Time_Stamp上有索引,我的代碼更快。 –
請[編輯]您的答案,添加解釋。其他答案根本沒有解決速度問題,所以這是一種區分你的方式。 :-) –
如果你想在最接近的日期之前的日期輸入:
;With cteTestDates As
(
Select *, DateDiff(Second,datefield1, '2016-07-01') DateDifference
From TestDates
)
Select Top 1 *
From cteTestDates
Where DateDifference >= 0
Order By DateDifference
如果你想在最接近的日期不論它是在過去或未來:
;With cteTestDates As
(
Select *, ABS(DateDiff(Second,datefield1, '2016-07-03')) DateDifference
From TestDates
)
Select Top 1 *
From cteTestDates
Order By DateDifference
要明確,你的time_stamp實際上是一個日期字段,而不是類型的時間戳? –
在我的表中,'Time_Stamp'列的類型是datetime –
SELECT TOP 1 * ...........按ABS排序(datediff(s,table_timeStamp,@myTimestamp)) – Cato