为给定id

时间:2019-03-29 00:06:25

标签: mysql

我有一个带有“订单”和“发货”时间戳的ID表。大多数ID将同时具有“订单”和“装运”行,但某些ID仅具有装运。我想实现一个If-Then逻辑,如果我在其中看到订单行,然后检索时间戳。如果一个ID不包含“订单”行,那么我将求助于“发货”时间戳。

我试图解决此问题的一种方法是创建一个case语句,以创建一个新的“ Orders”列,并为每个Orders和Shipment Row填充特定的时间戳。我将创建一个子查询,如果Orders列不为null,则使用该时间戳记。或者,如果“订单”列为空,则使用发货时间戳记。

我不能仅按行=“订单”进行过滤,因为它将消除仅包含货件的ID

原始表:

id    Type     Date    
1     orders    3/28     
1     shipment    3/23    

预期结果:

id    Type       Date    Orders_Column
1     orders      3/28    3/28
1     shipment     3/23   3/28

1 个答案:

答案 0 :(得分:2)

您可以使用表的LEFT JOIN来完成此操作,为orders寻找匹配的id行。如果没有匹配的行,则使用shipment日期:

SELECT o1.*, COALESCE(o2.Date, o1.Date) AS `Date`
FROM orders o1
LEFT JOIN orders o2 ON o2.id = o1.id AND o2.Type = 'orders'

输出(对于仅具有额外货件编号的演示):

id  Type        Date    Date
1   orders      3/28    3/28
1   shipment    3/23    3/28
2   shipment    3/25    3/25

Demo on dbfiddle