2015-04-22 47 views
0

有人可以帮助我处理此查询吗?我想所有的customer_id的其中重复24小时创建sql查询以在时间范围内获取重复列值

SELECT 
    O.Order_No, O.Customer_ID, O.DateOrdered, O.IPAddress, 
    C.FirstName, C.LastName, CD.nameoncard 
FROM 
    Order_No O 
INNER JOIN 
    CardData CD ON O.card_id = CD.id 
INNER JOIN 
    Customers C ON O.customer_id = C.customer_id 
ORDER BY 
    O.order_no desc 

增加更多的细节不止一次的结果.. 客户ID XX因此,假设订单于04/23下午2:30和2日再次订单在同一天04/23下午5:30与同一客户Id xx一起发出。

我想查询返回我的客户ID XX

感谢

回答

2
select Customer_ID, CAST(DateOrdered as Date) DateOrdered, count(*) QTDE 
from Order_No 
group by Customer_ID, CAST(DateOrdered as Date) 
having count(*) > 1 

要得到谁拥有第一一个后发出订单的客户,那么你可以使用下面的查询:

select distinct A.Customer_ID 
from Order_No A 
inner join (select Customer_ID, min(DateOrdered) DateOrdered from Order_No group by Customer_ID) B 
    on A.Customer_ID = B.Customer_ID 
    and A.DateOrdered - B.DateOrdered <= 1 
    and A.DateOrdered > B.DateOrdered 

SQL Fiddle

要获得有不止一个数量级的期间发行不超过24h或等于随时为所有客户

select distinct A.Customer_ID 
from Order_No A 
inner join Order_No B 
    on A.Customer_ID = B.Customer_ID 
    and A.DateOrdered > B.DateOrdered 
    and A.DateOrdered - B.DateOrdered <= 1 

SQL Fiddle

+1

此查询将如何在24小时内为我提供所有客户ID? – user3025605

+0

当你说24小时,你说的是同一天,或实际上24小时? – Nizam

+0

你是说最后24小时还是24小时? – Nizam

0

自连接:

SELECT distinct O.Customer_ID 
FROM 
Order_No O 
inner join Order_No o2 
on o.customerID = o2.customerID 
    and datediff(hour, o.DateOrdered, o2.DateOrdered) between 0 and 24 
and o.Order_No <> o2.Order_No 

这将返回所有CUSTOMER_IDS在任何24小时的时间内都有多个订单。

编辑添加匹配记录不应该是相同的记录的连接标准。应该返回同时放置两个不同订单的客户,而不是放置一个订单的客户。

+0

这将在O和O2中返回相同的订单。这就是为什么你需要有任何其他条件O.DateOrdered Nizam

+0

它只是返回不同的客户ID,所以这应该不重要,但编辑,以消除负面的datediff结果无论如何。谢谢@nizam。 – APH

+1

看看我在说什么http://sqlfiddle.com/#!6/deead/9。它是选择1,2和3.我认为它应该选择1(http://sqlfiddle.com/#!6/deead/10) – Nizam