2013-12-21 47 views
0

我正在使用mysql。如何使用sql查詢從重複/舊客戶中查找訂單?

我有orders表格,列customer_id, order_id, order_date(datetime)現在我想在2013年12月20日查找所有來自重複客戶(不是新客戶,即客戶先前已下過訂單)的所有訂單。

Orders表有其他典型的列,這裏也沒有提到。讓我知道我可以提供更多數據。

更新:我們可以做到沒有子查詢嗎?如果是的話如何? (只是好奇)

回答

0
select customer_id , order_id, order_date from orders where order_date between 
'20/12/2013 00:00:00' and '20/12/2013 23:59:00' AND 
customer_id IN (SELECT customer_id FROM orders where order_date < '20/12/2013') 
+0

當[處理日期/時間/時間戳值]時,您應該避免使用'BETWEEN'(http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and -the-devil-have-in-common.aspx)(是的,我知道MySQL沒有與SQL Server完全相同的問題 - 它更多地與一致性有關)。除此之外,只要價值是度量值(邏輯上有一定量的誤差),或者可能「不精確」,應該避免「BETWEEN」;這基本上排除了除了整數計數之外的所有數據,因此出於一致性的原因不應該使用它。 –

+0

如果問題是針對sql只是改變查詢 – Prashanth

+0

不錯,提供的目的。但是,還有一種方法可以在沒有子查詢的情況下獲得結果嗎?這會更快嗎?任何性能提示? –

-1

現在檢查該查詢

SELECT * FROM `orders` WHERE DATE='20/12/2013' AND customer_id IN (SELECT customer_id FROM yearly_sales WHERE DATE < '20/12/2013') 
+0

這完全沒有回答他的問題。 – Layke

+0

那麼這並不檢查客戶是舊的/新的。 –

0

假設的order_id是在訂單表的主鍵和CUSTOMER_ID是一個外鍵,你可以用下面的查詢自加盟拉出對應重複客戶的所有order_id列表:

select order_id, customer_id 
from orders a, orders b 
where a.customer_id = b.customer_id 
and order_date = '20131220'