【问题标题】:Sql Query Sorting IssuesSql 查询排序问题
【发布时间】:2012-03-10 22:38:09
【问题描述】:

我的数据库(sql server 2008)中有 2 个字段,即 updateDate[Datetime] 和 calldate[datetime]。我正在运行以从 db 获取数据的 sql 查询是:

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

现在的问题是 callbackdate 的默认值是 minimum date ,所以如果没有通过 date ,它会添加 minimumdate,我想在上面的查询中添加一个检查,所以它不会对 calldate 值设置为的记录进行排序最小日期值。例如,如果 calldate 是 minimumdate,那么该记录应该按续订日期排序。是否有可能实现这样的目标。

任何建议或意见将不胜感激。 谢谢

【问题讨论】:

  • 您可以使用 order by 子句中的 CASE 语句来做到这一点...

标签: sql-server-2008 select where-clause


【解决方案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

【讨论】:

  • 好吧,没有列作为 minimumdate ,默认设置最小日期
【解决方案2】:
Select YourColumns
from [Clients] 
where [Timestamp] < GetDate() 
order by 
    case when callDate = minimumDate then updateDate else callDate end, 
    updateDate

【讨论】:

  • 好吧,没有列作为 minimumdate ,默认设置最小日期
【解决方案3】:

试试这个(如果最小日期是 2009-01-01)

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

【讨论】:

    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多