2010-10-03 57 views
0

我正在使用sql-server 2005選擇10行與時間差最小的sql

嗨,我有用戶表userId和registrationDate。我想在兩個註冊日期之間選擇最短的時間段,當第一個日期是x和其他行是x + 10行。我不介意遊標,因爲我偶爾會運行這個查詢。

我會再次解釋一下,我需要10個用戶註冊之間的最短時間來了解每個特定時間註冊的高邊界是多少。

感謝

+0

你說的沒錯,你的回答是正是我一直在尋找,但由於英語是我的第三講過語言我無法正確寫出問題。 – eugeneK 2010-10-03 08:07:54

回答

1

,如果你使用的是SQL Server 2005或嘗試此查詢更新:

WITH T1 AS (
    SELECT 
     userID, 
     registrationDate, 
     ROW_NUMBER() OVER (ORDER BY registrationDate) AS rn 
    FROM Users 
), T3 AS (
    SELECT 
     T1.registrationDate AS interval_start, 
     T2.registrationDate AS interval_end, 
     T1.registrationDate - T2.registrationDate AS diff 
    FROM T1 
    JOIN T1 T2 
    ON T1.rn = T2.rn + 5 
) 
SELECT TOP 1 interval_start, interval_end 
FROM T3 
ORDER BY diff 
+0

1900-01-01 00:04:00 ,,,這是我得到的答案。當最低註冊日期是2008年和今天最高時... – eugeneK 2010-10-03 08:10:53

+0

您可以輕鬆修改查詢查看峯值發生的時間。看到我更新的查詢。 – 2010-10-03 08:35:09

+0

我的不好,,,現在我得到了什麼「1900-01-01 00:04:00」代表 – eugeneK 2010-10-03 08:47:41