最早按日期排序

时间:2009-06-09 02:57:14

标签: sql ruby-on-rails

这是交易。我有文章和问题,两者都有发布日期。 (问题必须,文章可以。)无论哪个日期早于发布日期。

我已经掌握了所有逻辑基本上已经解决了,而且一切都运行得很好,除了我无法弄清楚在此发布日期之前订购的订单条款。 实现此功能的最简洁的SQL方法是什么?我知道基本的SQL结构和诸如此类的东西,但不是这种高级逻辑......

提前致谢! --Matchu

5 个答案:

答案 0 :(得分:1)

这将有效:

order by 
case when article.date is not null and article.date<issue.date then article.date
else issue.date end

答案 1 :(得分:0)

您可以按基准日期(杂志)和发行日期进行订购。

按问题排序,文章。

此外,如果您有问题编号,那么您可以使用这些数字来订购您的资料,因为数量和发行数量往往会随着时间的推移不断增加。

答案 2 :(得分:0)

假设你有一个包含两个日期的表(这部分对我来说不清楚)并且ArticleReleaseDate可以为空,你会想要像

这样的东西
ORDER BY (CASE 
   WHEN IssueReleaseDate < ArticleReleaseDate OR ArticleReleaseDate IS NULL
   THEN IssueReleaseDate
   ELSE ArticleReleaseDate
   END)

答案 3 :(得分:0)

让我们假设您有几篇文章,每篇文章都属于一个问题。 (例如,杂志的问题,我猜)。您希望在它们出现时对它们进行排序,这可能是问题发布日期,或者在某些情况下,文章有自己的发布日期。以较早的日期为排序值。

要在一行中执行此操作,我们必须对您的数据库做出一些假设。我将向您展示MySQL,但如果需要,也许有人会提供另一个RDBMS的翻译。

Article.all :include => :issue, :order => "if( (isnull( articles.release_date ) OR articles.release_date > issues.release_date), issues.release_date, articles.release_date )"

答案 4 :(得分:0)

我认为你应该通过ORDER BY子句将排序顺序暴露给'最终用户',而不是在SELECT子句中找到排序逻辑(正如其他人提出的那样)。如果您的DBMS符合SQL-92,则可以仅使用ORDER BY子句中的相关名称,例如

SELECT COALESCE(CASE 
                   WHEN V1.issue_release_date <= V1.article_release_date 
                      THEN V1.issue_release_date
                   ELSE V1.article_release_date 
                END, V1.issue_release_date) AS considered_release_date, 
       <other columns here>
  FROM ...
 ORDER
    BY considered_release_date, <other correlation names here>;
相关问题