具有多个场景的SQL Order by
我有一个复杂的SQL查询,我想根据某些条件操作结果数据 下面是我的数据结构。它是3个表的组合,允许存储不同的活动及其注册周期 下面是一个基本查询(更复杂查询的一部分): 我想要实现的目标 我必须在以下条件下订购此数据,优先顺序为vise具有多个场景的SQL Order by,sql,sql-order-by,Sql,Sql Order By,我有一个复杂的SQL查询,我想根据某些条件操作结果数据 下面是我的数据结构。它是3个表的组合,允许存储不同的活动及其注册周期 下面是一个基本查询(更复杂查询的一部分): 我想要实现的目标 我必须在以下条件下订购此数据,优先顺序为vise 显示现在先注册的程序(所以我想今天应该介于StartDateTime和EndDateTime之间) 即将结束,(结束日期离今天最近) 即将开业(开始数据最接近今天) 我到目前为止所做的尝试 我试着创建一个临时表并存储每个条件的数据(尽管这不能正常工作),但
- 显示现在先注册的程序(所以我想今天应该介于StartDateTime和EndDateTime之间)
- 即将结束,(结束日期离今天最近)
- 即将开业(开始数据最接近今天)
select
act.ID, act.Name, arp.RegistrationPeriodId,
rp.StartDateTime, rp.EndDateTime
from
Activity act
join
ActivityRegistrationPeriod arp on arp.ActivityId = act.ID
join
RegistrationPeriod rp on rp.Id = arp.RegistrationPeriodId
--where
-- act.AccountId = 3106
order by
(case when GETDATE() between StartDateTime and endDateTime then 1 else 2 end),
(case when rp.EndDateTime is null then 2 else 1 end),
rp.EndDateTime asc,
(case when rp.StartDateTime is null then 2 else 1 end),
rp.StartDateTime desc
您可以使用
大小写
表达式:
order by (case when current_date between StartDateTime and endDateTime then 1 else 2 end),
endDateTime asc,
StartDateTime desc
请用您正在使用的DBMS标记您的问题。请以可编辑文本/表格(而非图片)形式提供样本日期,并包括列标题。请提供您希望看到的输出(基于您提供的样本数据)以及您希望用于推导结果的精确逻辑output@GordonLinoff我已经更新了这个问题,基本上它意味着第一个订单将是如果有任何活动正在注册。第二个将是即将关闭的,等等。谢谢@gordon,看起来它会工作,但我仍然需要为null和其他事情优化它。@Bharat。我想这回答了你在这里问的问题。是的,是……戈登,你能检查一下更新的查询吗,我正在尝试通过order by首先引入非空值。这和我在《质疑》中所做的一样好吗?@Bharat。这似乎是合理的。
order by (case when current_date between StartDateTime and endDateTime then 1 else 2 end),
endDateTime asc,
StartDateTime desc