Sql 如何按最近日期对表列进行排序?

Sql 如何按最近日期对表列进行排序?,sql,ruby-on-rails,ruby,rails-activerecord,Sql,Ruby On Rails,Ruby,Rails Activerecord,我有电子邮件邀请表,表中有三个日期时间列,发送,打开,以及回复。如何按日期按升序(最新的在顶部)对这三列进行排序 我正在rails中使用default\u范围: default_scope { order('sent_at ASC' } 这是我的 EmailInvitation id: 1, sent_at: "2016-03-24", opened_at: "2016-03-25", rsvped_at: "2016-03-25" id: 2, sent_at: "2016-03-24",

我有
电子邮件邀请
表,表中有三个日期时间列,
发送
打开
,以及
回复
。如何按日期按升序(最新的在顶部)对这三列进行排序

我正在rails中使用
default\u范围

default_scope { order('sent_at ASC' }
这是我的

EmailInvitation
id: 1, sent_at: "2016-03-24", opened_at: "2016-03-25", rsvped_at: "2016-03-25"
id: 2, sent_at: "2016-03-24", opened_at: "2016-03-25", rsvped_at: "2016-04-01"
id: 3, sent_at: "2016-03-23", opened_at: "2016-03-24", rsvped_at: nil
id: 4, sent_at: "2016-03-29", opened_at: nil, rsvped_at: nil
使用
EmailInvitation.order(发送地址::asc,打开地址::asc,rspved地址::asc)
它看起来像是先对发送的进行排序,然后在打开,然后在rsvped地址排序

id: 4, sent_at: "2016-03-29", opened_at: nil, rsvped_at: nil
id: 1, sent_at: "2016-03-24", opened_at: "2016-03-25", rsvped_at: "2016-03-25"
id: 2, sent_at: "2016-03-24", opened_at: "2016-03-25", rsvped_at: "2016-04-01"
id: 3, sent_at: "2016-03-23", opened_at: "2016-03-24", rsvped_at: nil
但是我真正想要的是最新的日期在顶部,所以我需要连接所有的列,这样它就不会看列名,只看日期

id: 2, sent_at: "2016-03-24", opened_at: "2016-03-25", rsvped_at: "2016-04-01"
id: 4, sent_at: "2016-03-29", opened_at: nil, rsvped_at: nil
id: 1, sent_at: "2016-03-24", opened_at: "2016-03-25", rsvped_at: "2016-03-25"
id: 3, sent_at: "2016-03-23", opened_at: "2016-03-24", rsvped_at: nil
大概是:

  • 处发送的\u将永远不会是
    nil
  • 如果处的
    opened\u是
    nil
    处的
    rsvped\u也是如此
  • sent\u at
    将始终最多打开
    opened\u at
    opened\u at
    将为
    nil
  • 如果
    opened\u at
    不是
    nil
    ,那么它将始终最多
    rsvped\u at
    rsvped\u at
    将是
    nil
  • 这意味着您实际上是在尝试按中的第一个非
    nil
    条目进行排序

    [rsvped_at, opened_at, sent_at]
    
    对吧??这与尝试在该列表中选择第一个非空条目并按其排序相同。使用COALESCE表达起来非常简单:

    order('coalesce(rsvped_at, opened_at, sent_at) desc')
    

    SQL COALESCE函数只返回其第一个(从左到右)非空参数。

    因为您对Athony不满意,所以回答:您能显示一些示例数据和预期结果吗?编辑:需要升序,而不是降序