首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个场景的SQL Order

使用多个场景的SQL Order
EN

Stack Overflow用户
提问于 2021-02-11 07:19:59
回答 1查看 71关注 0票数 1

我有一个复杂的SQL查询,我希望根据特定条件操作结果数据。

以下是我的数据结构。它是三个表的组合,它允许存储不同的活动及其注册期。

下面是一个基本查询(更复杂的查询的一部分):

代码语言:javascript
复制
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

我想要实现的

我必须在以下条件下订购这些数据,优先处理。

现在正在注册的

  • 显示程序,(因此,我想今天将处于StartDateTime和StartDateTime soon之间,(结束日期最近于今天)
  • 将很快打开(开始数据最近于今天)

到目前为止我尝试了什么,

我试着创建一个临时表,并为每种情况存储数据(尽管这不正常),但如果可能的话,我正在考虑排序,这就是为什么我把这个问题带到这里来,这样一个经验丰富的人就可以指导我了。

任何帮助都会很感激的。谢谢!

更新查询:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-11 13:16:29

您可以使用case表达式:

代码语言:javascript
复制
order by (case when current_date between StartDateTime and endDateTime then 1 else 2 end),
         endDateTime asc,
         StartDateTime desc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66150323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档