2012-02-20 77 views
0

我有我的數據庫(SQL Server 2008)的2個字段,即updateDate [日期時間] & calldate [日期時間]。我正在從日數據庫獲取數據的SQL查詢:Sql查詢排序問題

Select * from [Clients] where [Timestamp] < GetDate() ORDER BY calldate, updateDate 

現在的問題是callbackdate具有最小日期的默認值,因此如果沒有日期已過,它增加了minimumdate,我想在上面的查詢中添加一個檢查,以便它不排序具有calldate值的記錄被設置爲最小日期值。舉例來說,如果最小日期爲最新日期,那麼該記錄應該按更新日期排序。有可能獲得這樣的結果。

任何意見或建議將不勝感激。 感謝

+0

您正在使用什麼RDBMS? – Lamak 2012-02-20 15:31:41

+0

sql server 2008 – 2012-02-20 15:31:51

+0

你可以用CASE語句在order by子句中做到這一點... – Randy 2012-02-20 15:32:47

回答

1
DECLARE @minimumdate DATETIME 

SELECT @minimumdate = MIN(calldate) FROM [Clients] 

Select * 
from [Clients] 
where [Timestamp] < GetDate() 
ORDER BY CASE WHEN calldate = @minimumdate THEN updateDate ELSE calldate END 
+0

那麼沒有列作爲minimumdate,最小日期是默認設置 – 2012-02-20 15:40:03

+0

@MrA - 更新我的答案。 – Lamak 2012-02-20 15:45:10

1
Select YourColumns 
from [Clients] 
where [Timestamp] < GetDate() 
order by 
    case when callDate = minimumDate then updateDate else callDate end, 
    updateDate 
+0

那麼沒有列作爲minimumdate,最小日期是默認設置的 – 2012-02-20 15:40:18

1

試試這個(如果minimunm日期爲2009-01-01)

ORDER BY (CASE WHEN CallDate=DATE('2009-01-01') THEN RenewDate else CallDate END)