2012-02-20 50 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)