2013-04-22 33 views
5

我在SQL Server中擁有一個表,用於存放由BusinessDataDate組織的數據。 BusinessDataDate僅是一個日期(無時間組件),僅在工作日內填充。例如不是週末或公共假期。什麼是在SQL中查找「下一個但最新」日期的最佳方法?

因爲沒有特定的順序這一點,我想找到date before the current max date

此查詢的工作,我可以設置的值到本地變量 - 但它的感覺就像必須有一個更清潔的方式?

SELECT MAX(BusinessDataDate) FROM myTable 
    WHERE BusinessDataDate < (SELECT MAX(BusinessDataDate) FROM myTable) 

每個日期將在表中有多行 - 確切的數字是不可預測的。

+2

您的方法很好。在main和subquery中添加where子句以僅過去x天過濾可能會提高性能。 – 2013-04-22 11:37:16

+0

我可能會嘗試......但是,在中東地區工作時,它有點模糊地猜測。開齋節可能需要3-6天,如果與週末一致,那麼情感上可以有10天的範圍。 – BlueChippy 2013-04-22 12:03:09

回答

2

類似於原來的查詢,但關於使用前1怎麼樣?

SELECT Top 1 BusinessDataDate 
FROM myTable 
WHERE BusinessDataDate < (SELECT MAX(BusinessDataDate) FROM myTable) 
ORDER BY BusinessDataDate DESC 
+0

你需要ORDER BY外部查詢 – 2013-04-22 11:15:17

+0

好吧,發現!修訂。 – Ric 2013-04-22 11:16:28

+0

它怎麼樣更好?這將需要排序,原始查詢不會。 – Aryadev 2013-04-22 11:27:01

3
SELECT TOP (1) 
    BusinessDataDate 
FROM 
    (
    SELECT 
     BusinessDataDate, 
     DENSE_RANK() OVER (ORDER BY BusinessDataDate DESC) as rn 
    FROM 
     myTable 
    ) x 
WHERE 
    x.rn = 2 
ORDER BY 
    x.BusinessDataDate; 
+0

無效的列名稱'x'。 – BlueChippy 2013-04-22 11:23:40

+0

應該說 - 表中有多行 - 確切的行數在每個日期不同。 – BlueChippy 2013-04-22 11:24:58

+0

@BlueChippy:具體就是,不要downvote。很容易修復,如果**我們已經知道** – gbn 2013-04-22 11:29:45

相關問題