SQl запрос поможет получить правильные данные - PullRequest
0 голосов
/ 03 апреля 2019

Я хотел написать скрипт для возврата этих customer_id из таблицы customer со следующим условием.

  1. Дата получения находится между начальной и конечной датой в таблице заказов.
  2. Тогда число customer_id в таблице заказов после соответствия условию 1 больше единицы.

В приведенном ниже примере запрос выбора в существующем операторе должен возвращать только customer_id 300.

Поскольку число идентификаторов клиентов 100 равно 2, одна из начальных и конечных дат его записи не находится между датой получения ()

И у идентификатора клиента 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 голосов
/ 03 апреля 2019

В соответствии с комментариями, пожалуйста, найдите ниже запрос, чтобы получить идентификатор клиента 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

Как только вы сделаете это изменение в базе данных, используйте этот оператор => 'And c.name =' Ram '' else use (согласно вашей структуре таблицы) => 'And c.name =' John ''

Что даст вам результат ниже:

enter image description here

Это даст вам желаемый результат. Надеюсь, это поможет!

...