2017-02-14 32 views
0

獲取數據我有這個疑問從不同的時間段

SELECT concat(order_delivery_data.order_delivery_data_name,' sent'), 
     sum(case `order`.order_status when 'sent' then 1 else 0 end) '0-7 days' 
FROM order_delivery_data 
    INNER JOIN `order` ON order_delivery_data.order_id = `order`.order_id 
where order_delivery_data.order_delivery_data_name in ('Казахстан КАЗПОЧТА') 
     and order_statusUpdatedAt >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) 
UNION 
SELECT concat(order_delivery_data.order_delivery_data_name,' parcelonaplace'), 
     sum(case `order`.order_status when 'parcel-on-a-place' then 1 else 0 end) parcelonaplace 
FROM order_delivery_data 
    INNER JOIN `order` ON order_delivery_data.order_id = `order`.order_id 
where order_delivery_data.order_delivery_data_name in ('Казахстан КАЗПОЧТА') 
     and order_statusUpdatedAt >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) 

這是顯示2列。 如何在同一個查詢中獲得更多列?

enter image description here

回答

1

使用你的case語句條件聚集和改變你的where子句。 根據期望的結果,您可能需要更改第二個總和以使用日期範圍,而不是僅> 14天的間隔。

SELECT concat(order_delivery_data.order_delivery_data_name,' sent'), 

sum(case When `order`.order_status = 'sent' 
    AND order_statusUpdatedAt >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) then 1 else 0 end) '0-7 days', 
sum(case When `order`.order_status = 'sent' 
    AND order_statusUpdatedAt >= DATE_SUB(CURRENT_DATE, INTERVAL 14 DAY) then 1 else 0 end) '8-14 days'  
FROM order_delivery_data 
INNER JOIN `order` ON order_delivery_data.order_id = `order`.order_id 
WHERE order_delivery_data.order_delivery_data_name in ('Казахстан КАЗПОЧТА') 
    AND order_statusUpdatedAt >= DATE_SUB(CURRENT_DATE, INTERVAL 14 DAY) 

UNION 

SELECT concat(order_delivery_data.order_delivery_data_name,' parcelonaplace'), 
sum(case when `order`.order_status = 'parcel-on-a-place' 
    AND order_statusUpdatedAt >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) then 1 else 0 end) `parcelonaplace 0-7`, 
sum(case when `order`.order_status = 'parcel-on-a-place' 
    AND order_statusUpdatedAt >= DATE_SUB(CURRENT_DATE, INTERVAL 14 DAY) then 1 else 0 end) `parcelonaplace 8-14 

FROM order_delivery_data 
INNER JOIN `order` ON order_delivery_data.order_id = `order`.order_id 
WHERE order_delivery_data.order_delivery_data_name in ('Казахстан КАЗПОЧТА') 
    AND order_statusUpdatedAt >= DATE_SUB(CURRENT_DATE, INTERVAL 14 DAY) 
相關問題