表结构:ID  Productname  Startime  EndTime
select id,StartTime,EndTime,(case when getdate() between StartTime and EndTime then 0 when getdate()<StartTime then 1 else 2 end) as LISTORDER,  --判断商品即将开始(1)、正在进行中(0)、已经结束(2)datediff(second,getdate(),EndTime) as dates, datediff(second,getdate(),StartTime) as dates1from [ceb_DiHuDB].[dbo].[ceb_P_TuanGou]order by ...........排序条件先后顺序是:正在进行(剩余时间最小的拍前面)、即将开始(最先即将开始的时间拍前面)、已经结束
ps:不知道我说的是否明白,是一个商品竞拍的东西
sql

解决方案 »

  1.   

    select id,StartTime,EndTime,(case when getdate() between StartTime and EndTime then 0 when getdate()<StartTime then 1 else 2 end) as LISTORDER,  --判断商品即将开始(1)、正在进行中(0)、已经结束(2)datediff(second,getdate(),EndTime) as dates, datediff(second,getdate(),StartTime) as dates1from [ceb_DiHuDB].[dbo].[ceb_P_TuanGou]order by 2???
      

  2.   


    select 
    id,
    StartTime,
    EndTime, (case when getdate() between StartTime and EndTime then 0 when getdate()<StartTime then 1 else 2 end) as LISTORDER, datediff(second,getdate(),EndTime) as dates,  datediff(second,getdate(),StartTime) as dates1from 
    [ceb_DiHuDB].[dbo].[ceb_P_TuanGou]order by LISTORDER asc--真的是你描述的那个意思的话这个样子就行了
      

  3.   

    select id,StartTime,EndTime,
    (case when getdate() between StartTime and EndTime then 0 when getdate()<StartTime then 1 else 2 end) as LISTORDER, 
    datediff(second,getdate(),EndTime) as dates, 
    datediff(second,getdate(),StartTime) as dates1
    from [ceb_DiHuDB].[dbo].[ceb_P_TuanGou]
    order by 
    case when getdate() between StartTime and EndTime then datediff(second,GETDATE(),StartTime) end ,
    case when datediff(day,GETDATE(),StartTime)>=0 then datediff(day,GETDATE(),StartTime) end,
    case when datediff(day,GETDATE(),StartTime)<0 then datediff(day,GETDATE(),StartTime) end desc
      

  4.   


    select 
    id,
    StartTime,
    EndTime, (case when getdate() between StartTime and EndTime then 0 when getdate()<StartTime then 1 else 2 end) as LISTORDER, datediff(second,getdate(),EndTime) as dates,  datediff(second,getdate(),StartTime) as dates1from 
    [ceb_DiHuDB].[dbo].[ceb_P_TuanGou]order by LISTORDER asc,dates1 asc
      

  5.   

    SELECT * FROM
    (
    SELECT  id ,
    StartTime ,
    EndTime ,
    ( CASE WHEN GETDATE() BETWEEN StartTime AND EndTime THEN 0
       WHEN GETDATE() > StartTime THEN 1 --这儿有问题吧,应该是: StartTime < GETDATE(),开始时间小于今天
       ELSE 2
      END ) AS LISTORDER ,  --判断商品即将开始(1)、正在进行中(0)、已经结束(2)
    DATEDIFF(second, GETDATE(), EndTime) AS dates ,
    DATEDIFF(second, GETDATE(), StartTime) AS dates1
    FROM    [ceb_DiHuDB].[dbo].[ceb_P_TuanGou]
    ) t
    ORDER BY LISTORDER, 
    CASE 
    WHEN LISTORDER = 0 THEN DATEDIFF(MINUTE, GETDATE(), EndTime) --正在进行(剩余时间最小的拍前面)
    WHEN LISTORDER = 1 THEN DATEDIFF(MINUTE, StartTime, GETDATE()) --即将开始(最先即将开始的时间拍前面)
    ELSE 0
    END
      

  6.   

    建议楼主加一个字段SortID专门用来排序,竞拍开始、结束时分别更新其值