我想编写脚本以在以下条件下从customer表返回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)
根据评论,请在下面的查询中找到客户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''
哪个会给你以下结果:
这将给你想要的结果。希望这可以帮助!