SQl查询帮助获取正确的数据

时间:2019-04-03 02:52:06

标签: sql sql-scripts

我想编写脚本以在满足以下条件的情况下从客户表中返回那些customer_id。

  1. 获取日期在订单表的开始日期和结束日期之间。
  2. 然后,匹配条件1之后,订单表上的customer_id计数为一个以上。

在下面的示例中,existing语句中的select查询应仅返回customer_id 300。

因为即使客户ID 100的数量为2,其记录的开始日期和结束日期之一也不在get date()之间

Customer id 200只有一个记录,因此它也应该不在结果之列。

注意:我要加入客户表,因为我必须将客户名作为客户表的参数传递

订单表

ID      Customer_id   Start_date         End_date
1       100           1/1/2012         12/31/2017
2       100           1/1/2012          1/1/2015
3       200           1/1/2012          1/1/2020
4       300           1/1/2012          12/31/2018
5       300           1/1/2015           1/1/2019

客户表

ID  Customer_id   Name  
1   100            Ram  
2   300           John  
3   200           Jamie

我的脚本

If exist ( 

Select o.customer_id            

    from order o            
join customer c         

    ``on o.customer_id = c.customer_id          
where o.customer_id in (Select r.customer_id            
from order r            
where get date () between r.start_date and r.end_date)          

    And c.name = 'Ram'      
    group by o.customer_id          
having count(o.customer_id) > 1)            

1 个答案:

答案 0 :(得分:0)

根据评论,请在下面的查询中找到客户ID 300:

SELECT
    O.Customer_id         
FROM [dbo].[Order] O           
JOIN [dbo].[Customer] C        
    ON O.Customer_id = C.Customer_id          
WHERE O.Customer_id = (SELECT TOP 1 R.Customer_id            
FROM [dbo].[Order] R
WHERE GETDATE() BETWEEN CONVERT(datetime, r.Start_date) 
    and CONVERT(datetime, r.End_date)
ORDER BY R.Customer_id DESC)
--And c.name = 'Ram'  // As per Your Customer table this should be 'john'    
GROUP BY O.Customer_id          
HAVING COUNT(O.Customer_id) > 1

客户表应如下所示:

ID  Customer_id   Name  
1   100           John  
2   300           Ram  
3   200           Jamie

在数据库中进行此更改后,请使用以下语句=>'和c.name ='Ram' 否则使用(根据您的表结构)=>'和c.name ='John'

哪个会给您以下结果:

enter image description here

这将给您想要的结果。希望这会有所帮助!