SQl查询有助于获取正确的数据

问题描述 投票:0回答:1

我想编写脚本以在以下条件下从customer表返回customer_id。

  1. 获取日期在订单表的start_date和end_date之间。
  2. 然后匹配条件1后的订单表上的customer_id计数不止一个。

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

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

并且客户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)            
sql sql-scripts
1个回答
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

这将给你想要的结果。希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.