我正在使用mysql。如何使用sql查詢從重複/舊客戶中查找訂單?
我有orders
表格,列customer_id, order_id, order_date(datetime)
現在我想在2013年12月20日查找所有來自重複客戶(不是新客戶,即客戶先前已下過訂單)的所有訂單。
Orders
表有其他典型的列,這裏也沒有提到。讓我知道我可以提供更多數據。
更新:我們可以做到沒有子查詢嗎?如果是的話如何? (只是好奇)
我正在使用mysql。如何使用sql查詢從重複/舊客戶中查找訂單?
我有orders
表格,列customer_id, order_id, order_date(datetime)
現在我想在2013年12月20日查找所有來自重複客戶(不是新客戶,即客戶先前已下過訂單)的所有訂單。
Orders
表有其他典型的列,這裏也沒有提到。讓我知道我可以提供更多數據。
更新:我們可以做到沒有子查詢嗎?如果是的話如何? (只是好奇)
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')
現在檢查該查詢
SELECT * FROM `orders` WHERE DATE='20/12/2013' AND customer_id IN (SELECT customer_id FROM yearly_sales WHERE DATE < '20/12/2013')
這完全沒有回答他的問題。 – Layke
那麼這並不檢查客戶是舊的/新的。 –
假設的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'
當[處理日期/時間/時間戳值]時,您應該避免使用'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」;這基本上排除了除了整數計數之外的所有數據,因此出於一致性的原因不應該使用它。 –
如果問題是針對sql只是改變查詢 – Prashanth
不錯,提供的目的。但是,還有一種方法可以在沒有子查詢的情況下獲得結果嗎?這會更快嗎?任何性能提示? –