【问题标题】:Ordering by date when there are 3 date columns当有 3 个日期列时按日期排序
【发布时间】:2013-03-13 02:40:13
【问题描述】:

我有两张桌子,CHECKINSTRIPS

我需要在这 2 个表格中列出要排序的条目,最近的日期在顶部。

通常,我会简单地使用 JOIN 而不是用户 ORDER BY 日期列。

但这是挑战; CHECKINS 中有一个日期列 VenueCreatedAt,而 TRIPS 有两个日期列 TripDateStartedTripDateEnded

如果您能帮助我处理它,我将不胜感激。测试地址:

http://sqlfiddle.com/#!2/7f6055/33

【问题讨论】:

  • 您想要基于任何日期列中最新的顺序吗?您可以发布您想要的查询结果吗?
  • 并非全部,而是基于这 3 列之一; VenueCreatedAt, TripDateStarted, TripDateEnded
  • @Efe - 请根据您的样本向我们展示您希望如何查看结果。
  • @Efe:“其中之一”是什么意思?你怎么知道是哪一个? “最近的日期”是什么意思?你希望你的结果是什么样的?
  • 当多个日期字段中有多个日期时会发生什么?你想怎么处理?

标签: mysql sql


【解决方案1】:

怎么样:

SELECT * FROM TRIPS LEFT JOIN CHECKINS 
USING (MemberID) ORDER BY CheckInDateEntered ASC;

(http://sqlfiddle.com/#!2/7f6055/3)

您还可以按优先级顺序按多个字段排序,用逗号分隔它们:

SELECT * FROM TRIPS LEFT JOIN CHECKINS USING (MemberID) 
ORDER BY VenueCreatedAt,TripDateStarted,TripDateEnded ASC;

(http://sqlfiddle.com/#!2/7f6055/10)

如果这也不起作用,请查看LEAST 函数:

SELECT * FROM TRIPS LEFT JOIN CHECKINS USING (MemberID) 
ORDER BY LEAST(VenueCreatedAt,TripDateStarted,TripDateEnded) ASC;

(http://sqlfiddle.com/#!2/7f6055/15)

但请注意,这只会按日期最短的一列排序。如果您想按每行(交替列)的最小值进行排序,也许这三个其他问题中的任何一个都可以帮助您:

Order by max value in three different columns

Select Smallest Value From Multiple Columns with PHP/MySQL

Sorting a MySQL query with ORDER BY or with PHP sort functions

(它们都是关于按特定列集的每一行的最小值或最大值进行排序)

【讨论】:

  • 这不行,你通过CheckInDateEntered订购它们,但我需要根据所有3列订购它们; VenueCreatedAt、TripDateStarted、TripDateEnded
  • 对不起,我刚刚在 cmets 中看到了。我更新了我的答案,希望对您有所帮助:)
  • 我尝试了您之前提供的示例,但它们无法正常工作,就像您发送的测试地址一样。
  • 在您创建的所有示例中,大量数据处于循环中。它们会重复显示。
  • 我很困惑,我希望你能给我一个例子......无论如何,尝试在你的查询中使用DISTINCT (dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html),它不会显示同一行两次:SELECT DISTINCT * FROM TRIPS LEFT JOIN CHECKINS USING (MemberID) ORDER BY LEAST(VenueCreatedAt,TripDateStarted,TripDateEnded) ASC; (sqlfiddle.com/#!2/7f6055/39)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多