按照两个日期列进行SQL排序

6

我有一个订单表,每个订单都有一个delivery_date和一个collection_date

我想以一周的时间表形式检索订单,显示下一步完成的事情。

因此我想要展示时间顺序,使得星期三的收货出现在星期二的交货和星期四的另一次交货之间。

有什么关于如何使用SQL实现这一目标的想法吗?


你使用的是哪种数据库?MySQL、Oracle、MSSQL还是SQLite?它们处理日期数据的方式不同,并且具有不同命名的函数。任何答案可能都取决于特定的供应商。 - FrustratedWithFormsDesigner
2个回答

11

使用Union ALL,我将每条订单记录视为两条记录:一条用于交付,一条用于收集。如果您有另一个日期(修理?),则可以使用类似字段的子查询添加Union操作。

由于您没有提供订单表的任何规格,因此我进行了很多假设。

select *
from (
   Select OrderID
       , 'Colection' as VisitType
      , Collection_Date as VisitDate
   from Orders
   Union All
   Select OrderID
     , 'Delivery' as VisitType
     , Delivery_Date as VisitDate
  from Orders
) as v
order by v.VisitDate

谢谢您的回复。我会尝试这两种方法并选择最适合我的那一种。可能会选择第一种,因为它将两个日期合并在一个结果下面。所以我想我需要在代码中加入检查,以免相同的订单被显示两次? - Spunog
我从中学到了很多,非常感谢,现在我的行为非常完美 :) - Spunog

8
根据您使用的数据库不同,可能会有以下类似的操作:
ORDER BY CASE WHEN delivery_date > collection_date 
         THEN collection_date ELSE delivery_date END

谢谢您的帮助。是否可以将日期标记为另一个名称,例如“DT_THE_DATE”,无论是收集日期还是交付日期? - Spunog
@user1383132:MySql有一个Case语句(http://dev.mysql.com/doc/refman/5.0/en/case-statement.html) -- 我相信你可以翻译它。 - pdr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接