代码之家  ›  专栏  ›  技术社区  ›  Matchu

以最早的日期订货

  •  1
  • Matchu  · 技术社区  · 16 年前

    我知道基本的SQL结构等等,但不知道这种高级逻辑。。。

    提前谢谢--马库

    5 回复  |  直到 16 年前
        1
  •  1
  •   tekBlues    16 年前

    这将有助于:

    order by 
    case when article.date is not null and article.date<issue.date then article.date
    else issue.date end
    
        2
  •  0
  •   Middletone    16 年前

    您可以按基准日期(杂志)订购,然后按发行日期订购。

    按发行、文章顺序排列。

    此外,如果你有一个发行编号,那么你可以使用这些编号来订购你的物品,因为数量和发行数量往往会随着时间的推移不断增加。

        3
  •  0
  •   Michael Petrotta user3140870    16 年前

    假设你有一张有两个日期的桌子(这部分我不清楚),并且 ArticleReleaseDate 是可空的,您将需要以下内容

    ORDER BY (CASE 
       WHEN IssueReleaseDate < ArticleReleaseDate OR ArticleReleaseDate IS NULL
       THEN IssueReleaseDate
       ELSE ArticleReleaseDate
       END)
    
        4
  •  0
  •   austinfromboston    16 年前

    假设你有几篇文章,每一篇都属于一个问题。(我猜是在一本杂志上)。您希望按发布时间对其进行排序,即发布日期,或者在某些情况下,文章有自己的发布日期。以较早的日期为排序值。

    为了做到这一点,我们必须对您的数据库进行一些假设。我将向您展示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 )"
    
        5
  •  0
  •   onedaywhen    16 年前

    而不是将排序逻辑定位在 ORDER BY 子句(正如其他人在这里建议的那样),我认为您应该通过 SELECT 条款如果您的DBMS符合SQL-92,则可以在 订购人 条款,例如。

    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>;