我想编写脚本以在满足以下条件的情况下从客户表中返回那些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)
答案 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'
哪个会给您以下结果:
这将给您想要的结果。希望这会有所帮助!